File1でsed置換を実行してFile2行の出力を変更する方法

File1でsed置換を実行してFile2行の出力を変更する方法

File1.txtにはホストのリストが含まれています。

computer_1
computer_2

File2.txtにはコマンドのリストが含まれています。

ping host_name -c 10
dig host_name A host_name AAAA +short 

...ホストで実行されます。コマンドを実行する前に、file2の文字列をFile1の物理ホスト名sed -e "s/host_name/$line/" $2に置き換えてください。host_name私は最終的に:

ping computer_1 -c 10
dig computer_1 A computer_1 AAAA +short 
ping computer_2 -c 10
dig computer_2 A computer_2 AAAA +short 

この出力をコマンドとして実行するにはどうすればよいですか?

私は以下を含む成功しなかったいくつかの初心者アプローチを試しました。

while read line; do
    commands="$(sed -e "s/host_name/$line/" $2)"
    eval $commands
done < $1

ベストアンサー1

私はそれが期待どおりに機能しない引用符内の引用符の問題であると思います。

コードの構文を強調表示すると、何が起こっているかがヒントになります。s/host_name/$line/ロープの残りの部分は赤ではなく黒であることに注意してください。これは、bashが理解していないいくつかのゴミを含む2つの文字列を生成したためです。

このようなことがうまくいくはずです

while read line; do
    commands=$(sed -e "s/host_name/$line/" $2)
    eval "$commands"
done < $1

おすすめ記事