我是linux shell脚本的新手。我想写一个shell脚本,它将打开带有多个标签的终端。在每个选项卡中,它应该运行一个rtsp客户端应用程序。
我写了这段代码,
tab="--tab-with-profile=Default -e "
cmd="java RunRTSPClient"
for i in 1 2 3 4 5
do
#
foo="$foo $tab $cmd"
done
gnome-terminal $foo
exit 0
它的执行正常,但它会打开终端并立即关闭。(我没有收到错误)
如果我将行foo=...
替换为gnome-terminal --tab -e $cmd
,那么它的工作正常,但会打开独立终端。
谢谢
答案 0 :(得分:5)
你应该总是(总是!)使用数组来构建bash中的参数列表。
那是:
#!/bin/bash
# ^^ this has to be bash, not /bin/sh, for arrays to work
cmd=( gnome-terminal )
for ((i=0; i<5; i++)); do
cmd+=( --tab-with-profile=Default -e "java RunRTSPClient" )
done
"${cmd[@]}"
这将为您提供完全相同的运行:
gnome-terminal \
--tab-with-profile=Default -e "java RunRTSPClient" \
--tab-with-profile=Default -e "java RunRTSPClient" \
--tab-with-profile=Default -e "java RunRTSPClient" \
--tab-with-profile=Default -e "java RunRTSPClient" \
--tab-with-profile=Default -e "java RunRTSPClient"
......这就是我所理解的你想要的。
尝试在字符串中构建复杂命令会导致非常糟糕的事情发生;阅读http://mywiki.wooledge.org/BashFAQ/050以了解原因。