SSH経由でforループを実行する

SSH経由でforループを実行する

皆さん、こんにちは、

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つは空の文字列を定義しているため無視され、最後のものはで示されるオープン引用符で処理されます。質問が強調表示されたら、それを見ることができます。awksed''''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'

関連情報