--command
変数を使用してargを設定しようとしていますgnome-terminal
。
私のシェルスクリプトは次のとおりです。
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -e 'sh -c "while true; do
python acra.py $versionCode $buildId 0 $daily
sleep 600 # 10 mins
done"'
しかし、このスクリプトを実行すると新しい端末が開きますが、これらの変数を認識せず、sys.argv = ['acra.py', '0']
Pythonスクリプトとしてのみ受け取るため、cmdは次のように実行されているようです。
python acra.py 0
では、この場合、変数をどのように使用できますか?
答え1
gnome-terminal
次のように動作すると仮定しますxterm
。
gnome-terminal -e sh -c 'some commands here' sh "$variable1" "$variable2" "etc."
コマンドラインの末尾にある文字列は、などの形式sh -c
でスクリプトに提供されます$1
。スクリプトの最初の引数文字列はシェルによって配置され、エラーメッセージに使用されます。$2
$3
sh
$0
あなたの場合:
#!/bin/sh
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -e sh -c '
while true; do
python acra.py "$1" "$2" 0 "$3"
sleep 600
done' sh "$versionCode" "$buildId" "$daily"
これは、acra.py
現在の作業ディレクトリでスクリプトを使用できると仮定します。
答え2
先行は達成するのが難しい 回答エラーが発生します。
-x
オプションの代わりにオプションを使用すると、-e
エラーが解決されます。
エラー検出を容易にするために、次の例ではecho
notを使用しています。python
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -e sh -c \
'echo "$1" "$2" 0 "$3"; sleep 60' \
sh "$versionCode" "$buildId" "$daily"
結果:
Failed to parse arguments: Unknown option -c
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -x sh -c \
'echo "$1" "$2" 0 "$3"; sleep 60' \
sh "$versionCode" "$buildId" "$daily"
新しい端末ウィンドウを開き、新しいウィンドウに次の結果を印刷します。123456 aa-bb-cc 0 daily
gnome-terminal
マニュアルページから:-e, --command=文字列
端末内でこのオプションの引数を実行します。
-x、--実行
端末内で残りのコマンドラインを実行します。
正解は先行は達成するのが難しい方法:
#!/bin/sh
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -x sh -c '
while true; do
python acra.py "$1" "$2" 0 "$3"
sleep 600
done' sh "$versionCode" "$buildId" "$daily"
あなたの答えに基づいて(エンホークスバイパス)例:
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -e "sh -c \"while true; do
python acra.py $versionCode $buildId 0 $daily
sleep 600 # 10 mins
done\""
または
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -x sh -c "while true; do
python acra.py $versionCode $buildId 0 $daily
sleep 600 # 10 mins
done"