4

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

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 做到这一点。

4

5 回答 5

3

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

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

您可以启动 bash 或任何其他 shell 而不是 sh。有关更多示例,请参阅此堆栈交换帖子

于 2012-02-01T21:07:27.227 回答
2

不确定这会有所帮助,因为这篇文章已经有一年了,但我在 BASH 中编写 gnome-terminal 脚本时遇到了类似的问题。我的答案类似于riachdesign,但转义字符不同。这是我所做的:

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

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

希望这会有所帮助。

于 2012-07-03T21:16:36.243 回答
0

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

# initial arguments
command=(gnome-terminal -e 'command "complex argument"')
...
# add extra arguments
command=("${command[@]}" --tab -e 'command "complex argument2"')
...
# execute command
"${command[@]}"
于 2013-04-08T21:06:38.827 回答
0

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

于 2011-07-07T15:30:21.363 回答
0

看看这个红宝石宝石就是这样做的:https ://github.com/Achillefs/elscripto

于 2012-12-29T17:59:11.950 回答