xargs -I {} var = {} echo $ var && echo $ var Itu akan memberi Anda: Tidak ada file atau direktori.
Jawaban:
27
Tulis saja {}dua kali dalam perintah Anda. Berikut ini akan berfungsi:
$ echo test | xargs -I {} echo {} {}
test test
Masalah Anda adalah bagaimana perintah bersarang . Mari kita lihat ini:
echo test | xargs -I {} echo {} && echo {}
bash akan mengeksekusi echo test | xargs -I {} echo {}. Jika berhasil dijalankan, echo {}dieksekusi. Untuk mengubah sarang, Anda dapat melakukan sesuatu seperti ini:
echo test | xargs -I {} sh -c "echo {} && echo {}"
Namun, Anda bisa mendapatkan masalah karena pendekatannya mungkin rentan terhadap injeksi kode. Ketika "test" diganti dengan kode shell, itu dijalankan. Oleh karena itu, Anda mungkin harus meneruskan input ke shell bersarang dengan argumen.
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Perhatikan bahwa Anda akan mendapatkan hasil yang tidak terduga dalam kode terakhir Anda jika Anda memiliki panggilan nirkabel, secara harfiah $(rm -f *),. Lebih baik melakukannyaxargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Kusalananda
@ Kusalananda, terima kasih. Saya menyadari masalahnya tetapi saya tidak bisa memikirkan solusi sederhana pada saat itu. Saya mengintegrasikan saran Anda ke dalam jawabannya.
JojOatXGME
5
Pilihan lain adalah menggunakan -iflag, yang sama dengan -I{}(ini menyiratkan bahwa penggantian diberikan bersama {}):
Sementara itu: This option is deprecated; use -I instead.telah ditambahkan ke manual man xargs.
Jonathan Komar
0
Bagi saya hanya huruf kecil yang berfungsi. Saya memiliki ratusan gambar dalam direktori dan ingin memasukkannya ke dalam daftar. -IPilihan huruf besar saya tidak bekerja untuk saya. Hanya huruf kecil. Mungkin karena perbedaan versi. Semua gambar ini memiliki nama seperti Daniel_(somenumber).jpg.
var=test & echo $var ...
Jawaban:
Tulis saja
{}
dua kali dalam perintah Anda. Berikut ini akan berfungsi:Masalah Anda adalah bagaimana perintah bersarang . Mari kita lihat ini:
bash akan mengeksekusi
echo test | xargs -I {} echo {}
. Jika berhasil dijalankan,echo {}
dieksekusi. Untuk mengubah sarang, Anda dapat melakukan sesuatu seperti ini:Namun, Anda bisa mendapatkan masalah karena pendekatannya mungkin rentan terhadap injeksi kode. Ketika "test" diganti dengan kode shell, itu dijalankan. Oleh karena itu, Anda mungkin harus meneruskan input ke shell bersarang dengan argumen.
sumber
$(rm -f *)
,. Lebih baik melakukannyaxargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Pilihan lain adalah menggunakan
-i
flag, yang sama dengan-I{}
(ini menyiratkan bahwa penggantian diberikan bersama{}
):sumber
This option is deprecated; use -I instead.
telah ditambahkan ke manualman xargs
.Bagi saya hanya huruf kecil yang berfungsi. Saya memiliki ratusan gambar dalam direktori dan ingin memasukkannya ke dalam daftar.
-I
Pilihan huruf besar saya tidak bekerja untuk saya. Hanya huruf kecil. Mungkin karena perbedaan versi. Semua gambar ini memiliki nama sepertiDaniel_(somenumber).jpg
.Sintaks ini berhasil:
Pengembalian:
Linux ver 4.14.96-hw + # 80 SMP x86_64 GNU / Linux
sumber