多くのLinuxコマンドには、実行せずに実行する操作を示すテスト実行オプションがあります。 xargsのマニュアルページにはこれを行うための項目はなく、これをエミュレートするための明確な方法もありません。
(私の具体的なユースケースは長いパイプラインの問題を解決することです。もちろん、他のケースもあります。)
私は何を逃したことがありませんか?
答え1
-p
または、ロゴの恩恵を受けることができます-t
。
xargs -p
または、xargs --interactive
実行するコマンドを印刷してから、コマンドを実行する前に確認のために入力(y / n)するように求められます。
% cat list
one
two
three
% ls
list
% cat list | xargs -p -I {} touch {}
touch one ?...y
touch two ?...n
touch three ?...y
% ls
list
one
three
xargs -t
または、xargs --verbose
各コマンドを印刷してすぐに実行します。
% cat list | xargs -t -I {} touch {}
touch one
touch two
touch three
% ls
list
one
three
two
答え2
echo
実行するコマンドの前に1つを追加しますか?
$ echo a b c d e | xargs -n2 echo rm
rm a b
rm c d
rm e
答え3
お好みのプログラミング言語でパラメータを確認してください。
xargs
実行するコマンドの間に、次のいずれかのコマンドを挿入します。
ruby -e 'p ARGV'
node -e 'console.log(process.argv)'
python -c 'import sys; print sys.argv'
この回答では各例を使用しますruby -e 'p ARGV'
。
使用法
スクリプトをデバッグしたいとしましょう。
echo 1 2 3 4 | xargs echo
デバッグするには、ruby -e 'p ARGV'
前に次のように入力しますecho
。
echo 1 2 3 4 | xargs ruby -e 'p ARGV' echo
["echo", "1", "2", "3", "4"]
ご覧のとおり、明らかにecho
2つのパラメータを受け取りました。
別の使用例は次のとおりです-I
。
echo 1 2 3 4 | xargs -I@ ruby -e 'p ARGV' echo @
["echo", "1 2 3 4"]
今、私たちはecho
1つのパラメータしか受け取ることができません。
なぜダメなのxargs -t -p
?
コマンド引数に空白があると、-t
合計が実際にあいまいになるためです。たとえば、次のようになります。-p
printf 'hello world\0goodbye world' | xargs -0 -t echo
echo hello world goodbye world
hello world goodbye world
を見ると、パラメータが2つか4つかわかりにくいecho hello world goodbye world
です。echo
このソリューションを使用すると、各パラメータの処理方法を簡単に理解できますxargs
。
printf 'hello world\0goodbye world' | xargs -0 ruby -e 'p ARGV' echo
["echo", "hello world", "goodbye world"]