这个问题看起来像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
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"再说一次,它工作得很好,我对此几乎是满意的。
问:有没有更好的解决方案,避免循环?
谢谢
发布于 2015-08-29 01:37:33
未经测试,但您可能会骗过printf '%q'来做这项工作:
exec gnome-terminal --zoom=0.9 --disable-factory -e "$(printf '%q ' "$@")"发布于 2017-06-20 21:49:40
我知道这个线程很旧,但最近我有类似的需求,我创建了一个bash脚本来启动多个选项卡,并在每个选项卡上运行不同的命令:
#!/bin/bash
# Array of commands to run in different tabs
commands=(
'tail -f /var/log/apache2/access.log'
'tail -f /var/log/apache2/error.log'
'tail -f /usr/local/var/postgres/server.log'
)
# Build final command with all the tabs to launch
set finalCommand=""
for (( i = 0; i < ${#commands[@]}; i++ )); do
export finalCommand+="--tab -e 'bash -c \"${commands[$i]}\"' "
done
# Run the final command
eval "gnome-terminal "$finalCommand您只需在数组中添加命令并执行即可。
要点链接:https://gist.github.com/rollbackpt/b4e17e2f4c23471973e122a50d591602
https://stackoverflow.com/questions/32276623
复制相似问题