0

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
4

1 に答える 1

1

xargsは改行に取り組んでいません。改行はもはや区切り文字ではないので、すでに入力に含まれていた改行は文字通りに取得されます。

echoxargsに入力を提供するために実際に使用しecho -nている場合は、改行が追加されないように使用してください。エコー以外のものを使用している場合は、末尾の改行を追加しないようにする方法、trまたはsedまたはperlまたは何かを使用して改行を削除する方法を調べてください。

于 2013-02-15T02:16:59.957 に答える