xargsでフラグを使用し-d
てデリミタを指定すると、最後の値の後に改行が追加されるようです。いずれにせよ、置換を使用して値をコマンドの途中に固定すると、コマンドが中断します(xargsに値をコマンドの最後に渡すより「標準的な」方法とは異なります)。
言い換えると、これは、フラグを使用-d
し-I
て値をコマンドの途中に貼り付けた場合にのみ発生します。
どうすればこれを修正できますか?
例:
# echo "server1 server2 server3 server4"|xargs -r -d" " -I+ echo ssh + "sudo service myservice restart"
ssh server1 sudo service myservice restart
ssh server2 sudo service myservice restart
ssh server3 sudo service myservice restart
ssh server4
sudo service myservice restart
最後のコマンドは改行でオフセットされていることに注意してください。コマンドが改行で終了した場合、これは問題にはなりませんが、この場合は問題になりません。
" null"
xargsに渡すリストの最後にタックし、結果のエラーを無視することで、これを回避しました。しかし、それはお粗末な解決策であり、場合によっては危険です。
私の回避策:
# echo "server1 server2 server3 server4 null"|xargs -r -d" " -I+ echo ssh + "sudo service myservice restart"
ssh server1 sudo service myservice restart
ssh server2 sudo service myservice restart
ssh server3 sudo service myservice restart
ssh server4 sudo service myservice restart
ssh null
sudo service myservice restart