使用来自循环的复杂命令在gnome终端中打开多个选项卡

时间:2011-07-07 13:41:38

标签: bash scripting tabs gnome-terminal

我有一个需要像这样调用的命令:

command "complex argument"

如果我想运行gnome-terminal传递这个参数,它就像这样:

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

我想在终端中打开多个选项卡,每次都使用不同的参数执行此命令。这样做是这样的:

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

但问题来了,如果我想用脚本执行它,我从一个循环中获取每个标签的参数(即标签的数量是可变的)。我的基本想法是我收集单个变量的参数,然后将其传递给gnome-terminal。但我不知道如何做到这一点,所有嵌套的引用参数保持不变。要么所有内容都在一个参数中压缩(如果我调用gnome-terminal "$args"),要么它被每个空格分开(如果我调用gnome-terminal $args)。

有没有办法在bash中组合这样复杂的参数?或者,有没有办法将IPC消息发送到gnome-terminal,告诉它打开一个新选项卡并执行一个命令?我知道我可以用Konsole做到这一点,但现在我想用gnome-terminal做到这一点。

5 个答案:

答案 0 :(得分:3)

我刚遇到同样的问题,并在尝试修复时发现了这篇文章。如果“复杂参数”依赖于shell扩展,我相信你需要使用传递给gnome-terminal的命令启动一个shell。例如:

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

您可以启动bash或任何其他shell而不是sh。有关更多示例,请参阅this stack exhange post

答案 1 :(得分:2)

不确定这会有所帮助,因为帖子大约有一年的历史,但我在BASH编写了类似的问题脚本gnome-terminal。我的回答类似于riachdesign,但转义字符不同。这是我做的:

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

如果我没有在$ dir周围添加单引号(例如,$ dir与'$ dir'),则该行将逐字执行(即,它不会将变量的内容传递到行中)。

希望这有帮助。

答案 2 :(得分:0)

AFAIK,你可能需要转义双引号(或单引号,无论你在$ args周围使用什么),就像这样。 ('command \“complex argument1 \”' - tab -e'command \“complex argument2 \”')

答案 3 :(得分:0)

看看这个确实如此的红宝石宝石:https://github.com/Achillefs/elscripto

答案 4 :(得分:0)

我找到了解决方案:数组。他们可以做魔术。

# initial arguments
command=(gnome-terminal -e 'command "complex argument"')
...
# add extra arguments
command=("${command[@]}" --tab -e 'command "complex argument2"')
...
# execute command
"${command[@]}"