awk を使用してリモート マシンのログからデータを取得しようとしていますが、マシンに ssh して実行すると、
awk '{print $0}' /path/to/log.txt
期待どおりの出力 (ログ メッセージ、スタック トレースなどを含む) が得られますが、実行すると
ssh host "awk '{print $0}' /path/to/log.txt"
出力は次のようになります。
0
1
0
0
1
1
1
1
1
1
なぜこれが起こっているのでしょうか?
ドル記号をエスケープします。
ssh host "awk '{print \$0}' /path/to/log.txt"
一重引用符はローカル側を保護しないため$0、リモート側に送信される前に置き換えられます。
また、試すことができます:
ssh host 'awk "{print \$0}" /path/to/log.txt'
$0これはリモート側を保護しますが、コマンドにさらに変更を加える必要があります。
バックスラッシュなしでそれを行う1つの方法:
ssh domain.tld <<'EOF'
awk '{print $1}' /var/log/syslog*
EOF
これはhere-docsを使用します:
man bash | less +/'Here Documents'
これを試して:
ssh host "awk '{print}' /path/to/log.txt"
$0 が印刷のデフォルトであるため、機能します。
コマンドに $ がある場合は、スクリプト ファイルでコマンドを作成する方が簡単です。次に、次のことができます。
ssh host < cmdfile #cmdfile contains the command
一重引用符は、変数の展開を妨げません。スクリプトが行います。