コマンドの出力を配列に保存する

コマンドの出力を配列に保存する

このコマンドを実行しています。

ar=($( ssh -i id_rsa -T -y [email protected] sh -c "id;whoami;ps aux")) 

ps aux実行された各コマンドの出力を配列に保存して配列を呼び出す必要がありますが、配列呼び出し時に目的の結果や他のコマンドを取得することはできません。

echo ${ar[2]}

ps auxの最初の行が表示されます。

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

完全な結果ではなくps aux

ベストアンサー1

試してみてください(bash4.4+)

readarray -td '' a < <(
  ssh -i id_rsa -T -y [email protected] '
    id;     printf "\0"
    whoami; printf "\0"
    ps aux; printf "\0"'
)
id_output=${a[0]}
whoami_output=${a[1]}
ps_output=${a[2]}

sshrootコマンドラインを解釈するためにシェル(このユーザーのログインシェル)が呼び出されました。これを行うには、パラメータをリンクします。したがって、メソッドで実行されるのはおよび引数の-cあるシェルであり、そのシェルは、およびをsh -c id;whoami;ps aux実行します。ここでは重複して混乱を引き起こすだけです。sh -c idwhoamips auxsh -c

配列要素には、末尾の改行を含む各コマンドの完全な出力が含まれます。

印刷するには、次を使用します。

printf %s "$id_output"

改行を削除するには、次のようにします。

id_output=${id_output%$'\n'}

おすすめ記事