在 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 语法构建 command
和 bsubcmd
。 “幸运的是”你正在处理 make
无论如何,所以你可能 真的 想避免在那里传递的名称中有空格。
当我尝试执行下面的命令时,它显示错误,如“右引号后的额外字符”,但我正确地给出了它,当我在 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 语法构建 command
和 bsubcmd
。 “幸运的是”你正在处理 make
无论如何,所以你可能 真的 想避免在那里传递的名称中有空格。