お好みのプログラミング言語でパラメータを確認してください。

お好みのプログラミング言語でパラメータを確認してください。

多くの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実行するコマンドの間に、次のいずれかのコマンドを挿入します。

  1. ruby -e 'p ARGV'
  2. node -e 'console.log(process.argv)'
  3. 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"]

ご覧のとおり、明らかにecho2つのパラメータを受け取りました。

別の使用例は次のとおりです-I

echo 1 2 3 4 | xargs -I@ ruby -e 'p ARGV' echo @
["echo", "1 2 3 4"]

今、私たちはecho1つのパラメータしか受け取ることができません。

なぜダメなの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"]

関連情報