SSHを介してawkを使用して複数のコマンドを実行するには?

SSHを介してawkを使用して複数のコマンドを実行するには?

以下のコマンドの実行に問題があります。 awkコマンドに問題があります。バックスラッシュを追加してみましたが、まだ効果がありません。誰もが私の構文でどこが間違っているかを指摘できますか?

for i in $(cat db_hostlist2.txt | grep -v '^#'); do
  echo "Checking for $i";
  ssh admin@$i '
    . ./.bashrc; echo "Hostname : `hostname`";
    echo -e "Total DB is : `ps -ef | grep smon | grep -v grep | wc -l`\n";
    echo -e "Total DB is : \n`ps -ef | grep smon | grep -v grep |awk -F_ '{print $3}'`\n"
  ';
done

出力:

Hostname : TEST123
Total DB is : 3

awk: cmd. line:1: {print
awk: cmd. line:1:       ^ unexpected newline or end of string
Total DB is :

ベストアンサー1

for HOST in $(grep -v '^#' db_hostlist2.txt)
do
        echo "Checking for $HOST"
        ssh admin@$HOST <<EOF
echo "Hostname : " \$(hostname)
echo -e "Total DB is : \$(ps -ef | grep smon | grep -v grep | wc -l)\n"
echo -e "Total DB is : \n\$(ps -ef | grep smon | grep -v grep |awk -F_ '{print \$3}')\n"
EOF
        echo "$HOST Complete"
done

2つのEOF間のすべての内容は、$(cmd)を使用してリモートコマンドを実行しない限り、特殊文字をエスケープせずに正常に処理され、リモートで実行されます。必要に応じて、そこにローカル変数を入れることができます。

おすすめ記事