gnome-terminalコマンドに変数を渡す方法

gnome-terminalコマンドに変数を渡す方法

--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$3sh$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エラーが解決されます。

エラー検出を容易にするために、次の例ではechonotを使用しています。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"

関連情報