在 tcl 中打开 gnome 终端和 运行 脚本

Opening gnome-terminal and running script in tcl

当我尝试执行下面的命令时,它显示错误,如“右引号后的额外字符”,但我正确地给出了它,当我在 unix 命令行终端中尝试它时,终端正确打开。

exec gnome-terminal -e 'sh -c "bsub -Ip -n 1 -M <Memory> -q <queue_name> make"'

谁能帮我解决这个问题,或者有什么方法可以做同样的事情吗??

已编辑 -> 将“从 sh 之前更改为 bsub 之前

Tcl 的引用是 而不是 shell 的引用。 Tcl 使用 {} 就像 shell 使用单引号一样,除了大括号很好地嵌套。嵌套单引号是 shell 头痛的秘诀。

exec gnome-terminal -e {sh -c "bsub -Ip -n 1 -M <Memory> -q <queue_name> make"}

然而,在这种情况下,我反而会倾向于这样做:

set memory "<Memory>"
set queue "<queue_name>"
set command "make"

set bsubcmd "bsub -Ip -n 1 -M $memory -q $queue $command"
# It's much more convenient to build this command like this here.
# Otherwise you're doing lots of backslashes and so on and it's horrible and very easy to make bugs
exec gnome-terminal -e [format {sh -c "%s"} $bsubcmd]

唯一真正混乱的是,如果您传递空格,则必须使用 shell 语法构建 commandbsubcmd。 “幸运的是”你正在处理 make 无论如何,所以你可能 真的 想避免在那里传递的名称中有空格。