使用shell脚本打开包含多个选项卡的终端

use*_*903 3 linux shell

我是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
Run Code Online (Sandbox Code Playgroud)

它执行正常,但它将打开终端,并立即关闭.(我没有得到错误)如果我更换线foo=...,gnome-terminal --tab -e $cmd然后它的工作正常但打开独立终端.

建议我如何解决这个问题.

谢谢

Cha*_*ffy 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[@]}"
Run Code Online (Sandbox Code Playgroud)

这将为您提供完全相同的运行:

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"
Run Code Online (Sandbox Code Playgroud)

...这就是我所理解的你想要的东西.

尝试在字符串中构建复杂命令会导致非常糟糕的事情发生; 阅读http://mywiki.wooledge.org/BashFAQ/050以了解原因.