3

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

なぜこれが起こっているのでしょうか?

4

3 に答える 3

6

ドル記号をエスケープします。

ssh host "awk '{print \$0}' /path/to/log.txt"

一重引用符はローカル側を保護しないため$0、リモート側に送信される前に置き換えられます。

また、試すことができます:

ssh host 'awk "{print \$0}" /path/to/log.txt'

$0これはリモート側を保護しますが、コマンドにさらに変更を加える必要があります。

于 2012-06-04T18:08:14.787 に答える
5

バックスラッシュなしでそれを行う1つの方法:

ssh domain.tld <<'EOF'
awk '{print $1}' /var/log/syslog*
EOF

これはhere-docsを使用します:

man bash | less +/'Here Documents'
于 2012-06-04T18:20:42.523 に答える
2

これを試して:

ssh host "awk '{print}' /path/to/log.txt"

$0 が印刷のデフォルトであるため、機能します。

コマンドに $ がある場合は、スクリプト ファイルでコマンドを作成する方が簡単です。次に、次のことができます。

ssh host < cmdfile #cmdfile contains the command

一重引用符は、変数の展開を妨げません。スクリプトが行います。

于 2012-06-04T18:11:45.097 に答える