0

別のマシンでシェルスクリプトを実行する必要があります。一般的な呼び出し方法は次のようになります。

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null bot-bono@other-dt 'bash' < $GIT_ROOT/chip/sw/scripts/build.sh

他のスクリプトが呼び出されているため、build.shパラメータを渡すことができません。私が知る限り、abashがローカルで呼び出されるかどうかは、環境変数を継承します。リモートマシンで呼び出された場合、これは発生しません。

リモートボックスでbashに環境変数を渡す方法を知っている人はいますか?build.shまたは、ローカル環境変数を使用できるリモートシステムで呼び出すためのより良い方法があるかもしれません。

4

1 に答える 1

1

これを行う最良の方法はを使用すること-o SendEnv=YOURVARIABLEですが、サーバーが変数を寛大に許可するように設定されている場合にのみ機能します。そうでない場合は、次の回避策が考えられます。

コマンド自体で変数を設定できます。

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null bot-bono@other-dt \
    "export CFLAGS='$CFLAGS' LDFLAGS='$LDFLAGS'; bash" < $GIT_ROOT/chip/sw/scripts/build.sh

これには特定のSSH権限は必要ありませんが、変数に一重引用符を含めることができる場合は、変数をエスケープする必要があります。

変数がたくさんあり、それらを並べ替えたくない場合は、スクリプトとともに環境全体をダンプできます。

{ set; cat "$GIT_ROOT/chip/sw/scripts/build.sh" } | \
    ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null bot-bono@other-dt 'bash' 

これにより、リモートシステム上のすべてのローカル変数と関数が設定されますが、必要な変数に制限されず、PATHやDISPLAYなどの変数が上書きされるため、問題が発生する可能性があります。

于 2013-03-25T18:28:50.223 に答える