GNU/Linux >> Linux の 問題 >  >> Linux

デフォルトの区切り文字で xargs --max-args --replace を使用する際の問題

POSIX ドキュメントによると、 xargs スペースまたは改行で区切られた引数を使用して、指定されたユーティリティを実行する必要があります。これが、最初の2つの例で発生することです。

ただし、 --replace の場合 (または -I ) が使用されている場合、改行のみが引数を区切ります。救済策は xargs を与えることです 別々の行の引数:

$ printf '%s\n' a b c | xargs --max-args=1 --replace="{}" echo x "{}" y
x a y
x b y
x c y

POSIX オプションの使用:

printf '%s\n' a b c | xargs -n 1 -I "{}" echo x "{}" y

ここでは xargs を与えます 1行ではなく3行。 1 行 (最大) で、それを引数としてユーティリティを実行します。

-n 1 にも注意してください (または --max-args=1 ) は、 -I によって行われた置換の数であるため、必要ありません。 使用される引数の数を決定します:

$ printf '%s\n' a b c | xargs -I "{}" echo x "{}" y
x a y
x b y
x c y

実際、xargs の POSIX 仕様の根拠セクション 言う (私の強調)

<ブロック引用>

-I-L 、および -n オプションは相互に排他的です .いくつかの実装では、コマンドラインで複数指定された場合、最後に指定されたものを使用します。他の実装では、オプションの組み合わせをさまざまな方法で扱います。

これをテストしているときに、OpenBSD のバージョンの xargs-n の場合は次のようになります と -I 一緒に使用されます:

$ echo  a b c | xargs -n 1  -I "{}" echo x "{}" y
x a y
x b y
x c y

これは、GNU coreutils の xargs とは異なります。 します (これは x a b c y を生成します) )。これは、実装が -n の引数区切り文字としてスペースを受け入れるためです。 、 -I でも 使用されている。したがって、-I は使用しないでください。 および -n 一緒に (いずれにしても必要ありません)。


Linux
  1. LinuxでのBash履歴での単語修飾子の使用

  2. Sedコマンドで一度に複数のパターンを使用する

  3. MySQLでパスワードによってIDENTIFIEDでGRANTを使用中にエラーが発生しました

  1. printf での色の使用

  2. sed を使用して区切り文字で文字列を分割する

  3. Linuxでg ++を使用してSDL2を使用していますか?

  1. find と xargs を使用して rm でファイルを削除する

  2. Java アプリケーションのリモート表示に関する問題

  3. ddを使用してFFでファイルをパディングする方法は?