皆さん、こんにちは、
SSHを介してforループを実行しようとしています。このループは、サーバーにアカウントを持つ各ユーザーの最後のログインを取得するために使用されます。
ssh 172.20.2.1 '''for i in `cat /etc/passwd | awk -F: '{print $1}'`; do last -n 1 $i | sed -e '/^$/{N;d;}'; done'''
エラーが発生しました。
bash: -c: line 1: syntax error: unexpected end of file
-bash: d: command not found
-bash: }; done: command not found
グーグルしたのですが、情報があまりありませんでした。
どんな助けでも大変感謝します。
答え1
エラーは、'''
引用符を使用するコマンドを使用しているために発生します。また、コマンドを'
引用するためにシングルを使用するので、シェルはコマンドが終了したと見なして混乱します。私が知る限り、そのようなものは存在しません。最初の2つは空の文字列を定義しているため無視され、最後のものはで示されるオープン引用符で処理されます。質問が強調表示されたら、それを見ることができます。awk
sed
'''
'
awk
最も簡単な解決策は、コマンドを一重引用符で囲み、二重sed
引用符で囲むことですawk
。ただし、シェル変数として解釈されないようにスクリプト$1
でエスケープする必要があります。awk
また、理由なしに仕事を複雑すぎるようにしています。本当に必要なものは次のとおりです。
ssh localhost 'cut -d: -f1 /etc/passwd |
while read i; do last -n 1 $i | sed -e "/^$/{N;d;}"; done'