2017-11-28 6 views
2

シェルスクリプトでこれらの変数を宣言/参照する方法について私の頭を上げることはできません。bsh変数の拡張をsshにパイプ

はようcommands_to_execute_on_remote.shの内容を考える:ENVIRONMENT_NAMEは、ローカルマシン上の環境変数として宣言されている

for c in 1 2 3 4 5 
do 
    supervisorctl restart broadcast-server-${ENVIRONMENT_NAME}-${c} 
done 

...私は例えば、として、ローカルマシンからこれを実行している

cat commands_to_execute_on_remote.sh | ssh [email protected] 

は、どのように私は時間によってスクリプトがリモートボックスにパイプされ、ようにするために、これらの変数を参照するか、$ENVIRONMENT_NAMEには実際の値が入力されていますが、$cは - 明らかにスクリプト内のループカウンタですか?

答えて

1

コマンドを別のファイルに入れることは、不要な複雑さです。

ssh [email protected] <<____EOF 
    for c in 1 2 3 4 5; do 
     supervisorctl restart broadcast-server-${ENVIRONMENT_NAME}-\$c 
    done 
____EOF 

あなたは$c、リモートsshシェルで評価されるようにする方法をお知らせ(そう、あなたの地元のシェルからそれをエスケープする必要があります)、コマンドラインは、リモートサーバーに送信される前に$ENVIRONMENT_NAMEは、お近くのシェルによって展開されますしながら、 。

あなたは

sed "s/[$][{]ENVIRONMENT_NAME[}]/$ENVIRONMENT_NAME/" commands_to_execute_on_remote.sh | 
ssh [email protected] 

ようsomeething、ファイル内のスクリプトスニペットを置くことを主張した場合には、そのために可能に(そして醜いuseless cat回避します)。 (技術的に不要な中カッコを削除する場合は、正規表現を調整する必要があります。ENVIRONMENT_NAMEにスラッシュが含まれる場合は、"s%...%...%"などの別の区切り記号を使用してください)。

+0

プライベート変数名にも大文字を使用しないでください。ここでそれを修正しようとしていない。 – tripleee

関連する問題