GNU/Linux >> Belajar Linux >  >> Linux

Masalah menggunakan xargs --max-args --replace dengan pembatas default

Menurut dokumentasi POSIX, xargs harus menjalankan utilitas yang diberikan dengan argumen yang dibatasi oleh spasi atau baris baru, dan inilah yang terjadi pada dua contoh pertama Anda.

Namun, ketika --replace (atau -I ) digunakan, hanya baris baru yang akan membatasi argumen. Obatnya adalah dengan memberikan xargs argumen pada baris terpisah:

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

Menggunakan opsi POSIX:

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

Disini saya memberikan xargs bukan satu baris tapi tiga. Dibutuhkan satu baris (paling banyak) dan mengeksekusi utilitas dengan itu sebagai argumen.

Perhatikan juga bahwa -n 1 (atau --max-args=1 ) di atas tidak diperlukan karena ini adalah jumlah penggantian yang dibuat oleh -I yang menentukan jumlah argumen yang digunakan:

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

Faktanya, bagian Rationale dari spesifikasi POSIX di xargs kata (penekanan saya)

-I , -L , dan -n opsi saling eksklusif . Beberapa implementasi menggunakan yang terakhir ditentukan jika lebih dari satu diberikan pada baris perintah; implementasi lain memperlakukan kombinasi opsi dengan cara yang berbeda.

Saat menguji ini, saya perhatikan bahwa versi xargs OpenBSD akan melakukan hal berikut jika -n dan -I digunakan bersama:

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

Ini berbeda dengan xargs coreutils GNU tidak (yang menghasilkan x a b c y ). Ini karena implementasi menerima spasi sebagai pembatas argumen dengan -n , meskipun -I digunakan. Jadi, jangan gunakan -I dan -n bersama-sama (toh tidak diperlukan).


Linux
  1. Menggunakan warna dengan printf

  2. Menggunakan sed untuk membagi string dengan pembatas

  3. Masalah dengan tampilan remote dari aplikasi java

  1. Membuat penyimpanan default berfungsi dengan GRUB2 ...?

  2. Bagaimana cara mengisi file dengan FF menggunakan dd?

  3. Menggunakan daftar pengguna yang diizinkan dengan VSFTPD

  1. Cara memarkir domain menggunakan ISPConfig

  2. Menggunakan pengubah kata dengan riwayat Bash di Linux

  3. Kesalahan menggunakan GRANT dengan IDENTIFIED dengan kata sandi di MySQL