このスクリプトは、複数行を含むファイルを読み取るために使用され、各行にはタブ区切りの配列が含まれています。これらの配列要素をパラメータとして使用する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]}
一重引用符内にあるため置き換えられません。