GNU/Linux >> Linux Esercitazione >  >> Linux

Problema nell'utilizzo di xargs --max-args --replace con delimitatore predefinito

Secondo la documentazione POSIX, xargs dovrebbe eseguire l'utilità data con argomenti delimitati da spazi o newline, e questo è ciò che accade nei tuoi primi due esempi.

Tuttavia, quando --replace (o -I ) viene utilizzato, solo le nuove righe delimiteranno gli argomenti. Il rimedio è dare xargs argomenti su righe separate:

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

Utilizzo delle opzioni POSIX:

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

Ecco, do xargs non una riga ma tre. Prende una riga (al massimo) ed esegue l'utility con quella come argomento.

Nota anche che -n 1 (o --max-args=1 ) in quanto sopra non è necessario in quanto è il numero di sostituzioni effettuate da -I che determina il numero di argomenti utilizzati:

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

In effetti, la sezione Razionale delle specifiche POSIX su xargs dice (corsivo mio)

Il -I , -L e -n le opzioni si escludono a vicenda . Alcune implementazioni usano l'ultima specificata se ne viene fornita più di una su una riga di comando; altre implementazioni trattano le combinazioni delle opzioni in modi diversi.

Durante il test, ho notato che la versione di OpenBSD di xargs farà quanto segue se -n e -I sono usati insieme:

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

Questo è diverso dal xargs di GNU coreutils fa (che produce x a b c y ). Ciò è dovuto all'implementazione che accetta gli spazi come delimitatore di argomento con -n , anche se -I viene usato. Quindi, non usare -I e -n insieme (non è comunque necessario).


Linux
  1. Utilizzo di modificatori di parole con la cronologia di Bash in Linux

  2. Usare l'a capo automatico con Mc?

  3. Usare i colori con printf

  4. Utilizzo di sed per dividere una stringa con un delimitatore

  5. Usi SDL2 su Linux con g++?

Utilizzo di Cat Command in Linux con esempi

Pianifica i lavori in Linux con il comando 'at'

Rimozione di file con rm utilizzando find e xargs

Problema con la visualizzazione remota delle applicazioni Java

Fare in modo che il salvataggio predefinito funzioni con GRUB2...?

Come riempire un file con FF usando dd?