2017-04-18 9 views
2

SSH heredoc またはコマンド内でローカル変数とリモート変数の両方を使用できますか?SSH - heredocまたはコマンド内でローカル変数とリモート変数の両方を使用できない

以下はヒアドキュメントを使用してSSHスクリプトの一例である(実際のスクリプトはより複雑である):

FILE_NAMEは、リモートサーバ上で使用されるように、ローカルサーバ上に設定されています。

REMOTE_PIDは、ローカルサーバーで使用するリモートサーバーで実行する場合に設定されます。

スクリプトではFILE_NAMEが認識されます。 REMOTE_PIDは設定されていません。

EOFが 'EOF'に変更され、REMOTE_PIDが設定されている場合、FILE_NAMEは変更されていません。 (私は なぜこれが理解できません)

REMOTE_PIDとFILE_NAMEの両方を認識できる方法はありますか?

バージョン2のbashが使用されています。デフォルトのリモートログインはcshell、ローカルスクリプトはbashになります。

あなたは変数を展開したくない場合は $記号をエスケープする必要が
FILE_NAME=/example/pdi.dat 
ssh [email protected] bash << EOF 
# run script with output... 
REMOTE_PID=$(cat $FILE_NAME) 
echo $REMOTE_PID 
EOF 
echo $REMOTE_PID 

答えて

3

$ x=abc 
$ bash <<EOF 
> x=def 
> echo $x # This expands x before sending it to bash. Bash will see only "echo abc" 
> echo \$x # This lets bash perform the expansion. Bash will see "echo $x" 
> EOF 
abc 
def 

だからあなたの場合:

ssh [email protected] bash << EOF 
# run script with output... 
REMOTE_PID=$(cat $FILE_NAME) 
echo \$REMOTE_PID 
EOF 
+0

私は差があることだと思います'Y'も' 'X''に変更した方が明確です。 – 123

+0

@ 123良いアイデア、ありがとう –

+0

エコー$ Xが2番目のEOFの後に実行された場合、何が表示されるのですか? heredoc内で変数を設定して外部で使用することは可能ですか? –

関連する問題