3

Linuxシェルスクリプトは初めてです。複数のタブでターミナルを開くシェルスクリプトを書きたいです。また、各タブで 1 つの 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動作しますが、独立したターミナルが開きます。

これを修正する方法を教えてください。

ありがとうございました

4

1 に答える 1

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を読んで理由を理解してください。

于 2013-07-02T14:06:44.940 に答える