サブシェルの出力をプロセスにリダイレクトする

サブシェルの出力をプロセスにリダイレクトする

SSHでスクリプトを実行し、いくつかのパラメータをスクリプトに渡そうとします。以下を試しましたが、成功しませんでした。値が渡されませんでした。

$ LC_FOO=x ssh -o SendEnv=LC_FOO $HOST < myLongScript.sh

ターゲットホストは時々非常に制限され、定期的に再生成されるため、SSH設定を変更することは役に立ちません。

だから私はトリックを使ってスクリプト自体の中で値を渡そうとしました。つまり、スクリプトに変数を追加したいのです。

私も別の方法を試しました:

# doesn't work - 'ambiguous redirect'
$ ssh ... < $(...)

# doesn't work - 'LC_FOO=x: command not found'
$ $(echo "FOO=x"; cat myLongScript.sh) | ssh ...

ssh入力の前にその行を追加するにはどうすればよいですか?

答え1

あなたは一つが欲しいプロセスの交換たとえばssh ... < <(...)ssh ... < $(my_command)コマンドの置き換えそれぞれのリダイレクトを作成します。言葉my_commandリダイレクトの対象となって発生する結果です。

答え2

LC_FOO最初の例は、AcceptEnvサーバー側のファイルのリストにあるように変数を有効にすると機能します。/etc/ssh/sshd_config

$ grep AcceptEnv /etc/ssh/sshd_config
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
AcceptEnv LC_FOO

今動作します:

$ LC_FOO=x ssh -o SendEnv=LC_FOO [email protected] 'printenv LC_FOO'
x

代替

リダイレクト方法

私は次のタイトルの別のU&L Q&Aでこれを実演しました。リモートシステムでローカルスクリプトを実行し、パラメータを含める方法は?、あなたの例は、次を提案します。

$ ssh serverA "bash -s" -- < ./ex.bash "arg1" "arg2"
整理方法

他のU&L Q&Aタイトルで強調されたheredocスタイルを使用することもできます。シェルスクリプトで$ PATHのリモート値を表示する:

[root@skinner ~]# ssh mulder 'bash -s <<EOL
>   echo $HOSTNAME
>   hostname
> EOL'
mulder.bubba.net
mulder.bubba.net

引用する

関連情報