我有一个需要像这样调用的命令:
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做到这一点。
答案 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[@]}"