【发布时间】:2015-11-23 10:39:45
【问题描述】:
这个问题看起来像Opening multiple tabs in gnome terminal with complex commands from a cycle,但我正在寻找更通用的解决方案。
我有一个 C 程序,它使用参数调用脚本“xvi”。每个参数最初都包含在引号 (''') 中,并且参数中的每个引号都是独立的并带有反斜杠(此格式是先决条件)例如:
xvi 'a file' 'let'\''s try another'
脚本 xvi 必须使用“-e vim args”启动 gnome-terminal
使用 xterm 而不是 gnome-terminal,这很容易,因为 xterm 假定“-e”是最后一个参数并将所有尾部传递给 shell,所以以下是可以的:
exec /usr/bin/xterm -e /usr/bin/vim "$@"
对于 gnome-terminal,“-e”是一个选项,我们需要将整个命令行“打包”在一个参数中。这就是我所做的,没关系:将每个参数括在双引号中(\“arg\”)并反斜杠参数中的任何双引号:
cmd="/usr/bin/vim"
while [ "$1" != "" ] ; do
arg=`echo "$1" | sed -e 's/\"/\\\"/g'`
cmd="$cmd \"$arg\""
shift
done
exec gnome-terminal --zoom=0.9 --disable-factory -e "$cmd"
再一次,这很好用,我对此很满意。
问题:有没有更好的解决方案,避免循环?
谢谢
【问题讨论】:
-
您无法将复杂的命令稳健可靠地放入 shell 字符串中。有关此问题的讨论,请参阅 Bash FAQ 050。你可以使用
--或类似的方法告诉gnome-terminal停止处理参数吗?你能通过标准输入/etc. 用"$@"给它输入命令吗?