Открытие нескольких вкладок в терминале gnome с помощью сложных команд из цикла - PullRequest
4 голосов
/ 07 июля 2011

У меня есть команда, которую нужно вызывать так:

command "complex argument"

Если я хочу запустить gnome-терминал, передав ему этот аргумент, она выглядит так:

gnome-terminal -e 'command "complex argument"'

Я хочу открыть несколько вкладок в терминале, выполняя эту команду с разными аргументами каждый раз.Это работает следующим образом:

gnome-terminal -e 'command "complex argument1"' --tab -e 'command "complex argument2"'

Но проблема возникает, если я хочу выполнить его с помощью скрипта, где я получаю параметры для каждой вкладки из цикла (т. Е. Количество вкладок является переменным).Моя основная идея заключалась в том, что я собираю аргументы в одну переменную, а затем передаю ее в gnome-терминал.Но я не знаю, как это сделать, оставив все вложенные аргументы без изменений.Либо все сжимается в один аргумент (если я вызываю gnome-terminal "$args"), либо он распадается на все пробелы (если я называю gnome-terminal $args).

Есть ли способ составить такие сложные аргументы в bash?Или, в качестве альтернативы, есть ли способ отправить сообщения IPC на gnome-терминал, говоря ему открыть новую вкладку и выполнить команду?Я знаю, что могу сделать это с помощью Konsole, но теперь я хочу сделать это с помощью gnome-терминала.

Ответы [ 5 ]

3 голосов
/ 02 февраля 2012

Я просто столкнулся с этой же проблемой и наткнулся на этот пост, пытаясь исправить это.Если «сложный аргумент» зависит от расширения оболочки, я считаю, что вам нужно будет запустить оболочку с командой, переданной в gnome-терминал.Например:

gnome-terminal \
--tab -e "sh -c 'command \"complex argument1\"'" \
--tab -e "sh -c 'command \"complex argument2\"'"

Вы можете запустить bash или любую другую оболочку вместо sh.Дополнительные примеры см. В этом стековом посте .

2 голосов
/ 04 июля 2012

Не уверен, что это поможет, так как посту около года, но у меня была похожая проблема скриптового gnome-терминала в BASH. Мой ответ похож на riachdesign, но escape-символы отличаются. Вот что я сделал:

gnome-terminal -e bash -c "/home/someprogramtorun /home/user/'$dir'/filetopasstoprogram.txt"

Если бы я не добавлял одинарные кавычки вокруг $ dir (например, $ dir против '$ dir'), строка выполнялась бы дословно (то есть она не передавала бы содержимое переменной в строку).

Надеюсь, это поможет.

0 голосов
/ 09 апреля 2013

Я нашел решение: массивы.Они могут творить магию.

# initial arguments
command=(gnome-terminal -e 'command "complex argument"')
...
# add extra arguments
command=("${command[@]}" --tab -e 'command "complex argument2"')
...
# execute command
"${command[@]}"
0 голосов
/ 29 декабря 2012

Взгляните на этот рубиновый камень, который делает именно это: https://github.com/Achillefs/elscripto

0 голосов
/ 07 июля 2011

AFAIK, вам может понадобиться экранировать двойные кавычки (или одинарные кавычки, независимо от того, что вы используете около $ args), вот так.('команда \ "сложный аргумент1 \"' --tab -e 'команда \ "сложный аргумент2 \"')

...