Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: [РЕШЕНО] Пара вопросов о bash  (Прочитано 1426 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ivanxstupid

  • Автор темы
  • Новичок
  • *
  • Сообщений: 40
    • Просмотр профиля
[РЕШЕНО] Пара вопросов о bash
« : 18 Сентября 2013, 00:04:33 »
Привет еще раз!

Решил организовать себе консольное рабочее пространство в правом нижнем углу «простыни» десктопа,
выглядит это так:
(Нажмите, чтобы показать/скрыть)

Написал нехитрый сценарий, чтобы эта штука строилась сама в вышеуказанном месте при залогинивании:
#!/bin/bash
# This will create the terminal desk at workspace 4
# this instance is designed to be a startup scenario
# it has been tested on Ubuntu Raring Ringtail with Unity
# note that screen resolution and sleep timers may be inappropriate for your system

sleep 25 # waiting for an environment to load

wmctrl -o '1440, 900' # jumping to workspace 4

# creating terminal desk with certain tabs
gnome-terminal --title=gterm --maximize --working-directory=~ \
--tab --title=actions \
--tab --title=sudo --working-directory=/ \
--tab --title=install \
--tab --title=vi -e vi \
--tab --title=mc -e mc \
--tab --title=generic \
& # continue immediately
sleep 5
wmctrl -o '0, 0' # jumping back to workspace 1

exit 0

Собственно говоря, все работает, но не совсем так, как хотелось бы, во-первых хотелось бы фокус
не на последнюю вкладку а на первую, как его установить? (--active в нужной вкладке не помогает)
Ну это дело второе, главный вопрос такой: как выполнять команды в открытом терминале?
Я знаю что есть ключ -e, но он в данном случае не подходит потому что требует вложенных кавычек,
например:
#gnome-terminal --full-screen -e 'echo 'Hello, I am Gnome Terminal!''
Как заставить sh правильно понимать кавычки в кавычках я так и не понял, помогите, пожалуйста.
« Последнее редактирование: 18 Сентября 2013, 18:35:51 от ivanxstupid »

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7836
  • Eternally
    • Просмотр профиля
Re: Пара вопросов о bash
« Ответ #1 : 18 Сентября 2013, 01:48:15 »
а если так?
gnome-terminal --full-screen -e echo 'Hello, I am Gnome Terminal!'
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн artifactor

  • Старожил
  • *
  • Сообщений: 1769
    • Просмотр профиля
    • Leaf Watoru's notes
Re: Пара вопросов о bash
« Ответ #2 : 18 Сентября 2013, 08:21:46 »
пробовали вместе двойные и одинарные кавычки?
Xubuntu 16.04 x64
Обои для рабочего стола и Space Ambient

Оффлайн ivanxstupid

  • Автор темы
  • Новичок
  • *
  • Сообщений: 40
    • Просмотр профиля
Re: Пара вопросов о bash
« Ответ #3 : 18 Сентября 2013, 11:03:52 »
ALiEN175, не работает: строка считывается в параметр пока не встретит пробел :(
Причем echo понимает пробелы, а ключ -e — нет.

xf∞, да, я пробовал такую запись:
gnome-terminal --maximize --title=gterm \
-e 'wmctrl -r gterm -e "0, 1440, 900, 1440, 900"'
и она не работает, фрагментами в кавычках при этом считаются 'wmctrl -r gterm -e " и "'.

Еще заметил такую историю: если использовать символ объединения строк \, то на этой строке
нельзя оставить комментарий, например фрагмент кода:
...
gnome-terminal --title=gterm --maximize --working-directory=~ \        # creating terminal desk with certain tabs
--tab --title=actions \
...
работать не будет, вернее будет, но неверно.
« Последнее редактирование: 18 Сентября 2013, 11:05:48 от ivanxstupid »

Оффлайн artifactor

  • Старожил
  • *
  • Сообщений: 1769
    • Просмотр профиля
    • Leaf Watoru's notes
Re: Пара вопросов о bash
« Ответ #4 : 18 Сентября 2013, 13:30:48 »
тогда можно попробовать так:
#gnome-terminal --full-screen -e && echo 'Hello, I am Gnome Terminal!'либо эмулировать нажатия клавиш, но это уже крайний вариант. также слышал, что передавать данные можно через d-bus

кстати, можно вместо эхо попробовать указать ссылку на скрипт, где будет ваша команда, то же эхо.
Xubuntu 16.04 x64
Обои для рабочего стола и Space Ambient

Оффлайн ivanxstupid

  • Автор темы
  • Новичок
  • *
  • Сообщений: 40
    • Просмотр профиля
Re: Пара вопросов о bash
« Ответ #5 : 18 Сентября 2013, 13:42:02 »
xf∞, оператор && означает "выполнить сразу после" и подразумевает что все что стоит перед ним является законченной командой, на что sh справедливо ругается:
(Нажмите, чтобы показать/скрыть)

что касается ссылок на скрипт это тоже не сработает, т. к. ссылка на скрипт — это всего лишь указание шелл-обработчику подставить на место ссылки команды скрипта — замкнутый круг :2funny:
« Последнее редактирование: 18 Сентября 2013, 13:44:26 от ivanxstupid »

Оффлайн artifactor

  • Старожил
  • *
  • Сообщений: 1769
    • Просмотр профиля
    • Leaf Watoru's notes
Re: Пара вопросов о bash
« Ответ #6 : 18 Сентября 2013, 14:13:36 »
ivanxstupid, насчёт комады && я знаю, но gnome-teminal никогда не работал, поэтому не в курсе его параметров. можете попробовать другие терминалы. сакуру предлагать не буду, т.к. это примерно то же самое, можно попробовать с xfce4-terminal пошаманить.

раз ключ не воспринимает пробелы, могу ещё предложить попробовать записать так:
gnome-terminal --full-screen -e echo'Hello,_I_am_Gnome_Terminal!'
Xubuntu 16.04 x64
Обои для рабочего стола и Space Ambient

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Пара вопросов о bash
« Ответ #7 : 18 Сентября 2013, 14:29:40 »
ivanxstupid,
gnome-terminal --full-screen -x bash -c 'echo "Hello, I am Gnome Terminal!" ; bash'

Оффлайн ivanxstupid

  • Автор темы
  • Новичок
  • *
  • Сообщений: 40
    • Просмотр профиля
Re: Пара вопросов о bash
« Ответ #8 : 18 Сентября 2013, 14:49:12 »
ArcFi, гениально!!! Спасибо вам огромное, вот что значит знание манов! Один только вопрос:
если после -x стоит \ то, что находится на следующей строке будет относиться к -x или к gnome-terminal?

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Пара вопросов о bash
« Ответ #9 : 18 Сентября 2013, 17:02:00 »
ivanxstupid, бэкслеш экранирует (отменяет специальное значение) следующий за ним символ.
Он обрабатывается текущим командным интерпретатором до выполнения самой команды.

Оффлайн ivanxstupid

  • Автор темы
  • Новичок
  • *
  • Сообщений: 40
    • Просмотр профиля
Re: Пара вопросов о bash
« Ответ #10 : 18 Сентября 2013, 18:35:01 »
Спасибо большое еще раз уважаемый ArcFi, также спасибо всем, кто отписывался в этой теме.
Я закончил скрипт, теперь он будет работать для любого Unity, вот то, что получилось:
#!/bin/bash
# This will create the Terminal Desk at workspace 4
# this instance is designed to be a startup scenario
# it has been tested on Ubuntu Raring Ringtail with Unity
# note that sleep timers may be inappropriate for your system

#sleep 25                          # waiting for an environment to load (optional)



xres=`xrandr | grep \* | sed 's/[ x.*+]/~/g;s/~\+/~/g' | cut -d~ -f2`        # receiving screen size from xrandr output
yres=`xrandr | grep \* | sed 's/[ x.*+]/~/g;s/~\+/~/g' | cut -d~ -f3`
#xres+=2*xres        # modify these lines to choose another workspace
#yres+=2*yres
wmctrl -o "$xres, $yres"        # jumping to workspace 4 by default



# creating terminal desk with certain tabs
gnome-terminal --title=gterm --maximize --working-directory=~         \
--tab --title=actions \
--tab --title=sudo --working-directory=/ -e 'sudo bash' \
--tab --title=install \
--tab --title=man \
--tab --title=vi -e vi \
--tab --title=mc -e mc \
--tab --title=generic \
-x bash -c 'echo "Welcome to Terminal Desk layout."; \
echo "To configure this workspace please refer to the"; \
echo "instructions in your \"gtermdesk.sh\" scenario."; \
bash' \
&        # continue immediately
sleep 5
wmctrl -o '0, 0'        # jumping back to workspace 1

exit 0



# The following are the autostart instructions
# you may want to modify sleep timer and working path
# in order to make them suitable for your system
# do not uncomment the command below!
#sleep 25 && ~/gtermdesk.sh

Если кому интересно, дополнительно разъясню по фрагментам.
РЕШЕНО :)

 

Страница сгенерирована за 0.017 секунд. Запросов: 20.