コンテンツを含むテンプレートファイルがあります。
数量:2
ssh ubuntu@ip << EOF
cat template|grep count|awk -F":" '{print $2}' > log
EOF
希望の出力は2です。
しかし印刷中count : 2
答え1
ここにあるドキュメントは、変数拡張と同様の参照コンテキストを<< EOF
生成します。そこにローカルシェルによって拡張されている"..."
。$2
(アポストロフィは大きな引用符付き文字列内にあるため、何も引用しないため、特殊文字ではありません。入れ子にして「引用レベルを上げる」ことは'...'
できません"..."
。)
ローカルシェルには引数がない可能性があるため、空の$2
文字列に展開されますが、リモートシェルはstdinから受け取ります。
cat template|grep count|awk -F":" '{print }' > log
awkはprint
フルラインです。
次のように、終了文字列にアポストロフィスタイルの引用符を追加して、変数を拡張しないようにheredoc演算子に要求できます。
ssh ... << 'EOF'
...
EOF
この例では、この操作を実行すると、ファイルは$2
heredoc処理後も保持され、sshを介してリモートシェルに渡されます。
ボーナスのヒント:すべてができるので、cat | grep | awk
これは二重の無駄です。awk
リモートコマンドは次のとおりです。
awk -F":" '/count/ {print $2}' template > log