ファイルループでSSHを使用すると奇妙な出力

ファイルループでSSHを使用すると奇妙な出力

このスクリプトは、複数行を含むファイルを読み取るために使用され、各行にはタブ区切りの配列が含まれています。これらの配列要素をパラメータとして使用するsudo権限でいくつかのリモートコマンドを実行したいと思います。以下はスクリプトの例です。

while IFS=$'\t' read -r -a line
do
  echo ${line[0]}
  ssh -tty -o StrictHostKeyChecking=no ${line[0]} 'sudo echo ${line[1]}; sudo echo ${line[2]}' 
done < nodes.txt

以下はサンプル入力ファイルです。

rivervm-1       dc2     rack1
rivervm-2       dc2     rack2
rivervm-3       dc2     rack3
rivervm-4       dc2     rack4

出力はそれぞれ新しい行に12個の変数でなければなりません。しかし、これが私が得るものです:

rivervm-1
rivervm-2   dc2 rack2
rivervm-3   dc2 rack3
rivervm-4   dc2 rack4

Connection to rivervm-1 closed.

どんなアイデアがありますか?

ベストアンサー1

まず、sshコマンドは入力(からnodes.txt)を食べて追加します< /dev/null。 aを追加すると、&同じ効果が表示されます。これは、sshバックグラウンドに配置すると標準入力から分離されるためです。

第二に、Kusalalanandaが示すように、変数と${line[1]}${line[2]}一重引用符内にあるため置き換えられません。

おすすめ記事