Backticks tidak dapat berfungsi di sana karena dievaluasi sekali sebelum findbahkan dieksekusi dan hasilnya digunakan sebagai parameter statis untuk find.
Sven
Jawaban:
10
Cara terbaik untuk melakukannya adalah dengan menggunakan parameter posisi. Dan $()yang lebih disukai untuk perintah substitusi backticks ove karena itu lebih mudah dibaca (tidak bingung dengan tanda kutip tunggal) dan dapat dengan mudah bersarang tanpa harus melakukan banyak melarikan diri.
Terima kasih telah memecahkan masalah langsung saya, tetapi saya masih penasaran untuk mengetahui apakah backticks dapat digunakan seperti yang dijelaskan. Hanya untuk memperluas wawasan saya.
RomanSt
Anda harus meminta shell melalui bash -catau serupa.
Ignacio Vazquez-Abrams
0
Satu-satunya cara untuk menggunakannya (AFAIK) adalah menempatkannya dalam file skrip bash dan menggunakan skrip di -exec. Sama halnya dengan$()
Jangan lupa xargs! Contoh Anda akan meminta proses shell baru untuk setiap file yang ditemukan.
Saya lebih suka ini:
find ... | xargs stat -c "Blah: %a"
findmenampilkan daftar semua yang ditemukan, xargsmembaca daftar argumen di stdindan mengeksekusi parameternya dengan argumen-argumen di baris perintah, membangun selama baris perintah mungkin. Ini bekerja karena stat, seperti kebanyakan perintah / program lain yang tepat, mengambil sejumlah parameter. (bandingkan ls, rmdan echomisalnya)
Jika Anda merasa perlu untuk meluncurkan proses baru untuk setiap file, gunakan xargs -n 1hanya untuk mengirimkan 1parameter ke setiap perintah. Dengan begitu Anda dapat meniru metode yang tidak efisien seperti ini:
find ... | xargs -n 1 stat -c "Blah: %a"
(Cobalah di sistem file besar di komputer yang lambat dan pertahankan waktu perbedaannya!)
Saya menghargai upaya ini, tetapi saya perlu backticks itu. Jelas contoh saya disederhanakan dan menggunakan echo + stat; skrip asli tidak menggunakan gema atau stat, jadi trik Anda untuk menyatukannya ke dalam format string stat tidak membantu sama sekali.
find
bahkan dieksekusi dan hasilnya digunakan sebagai parameter statis untuk find.Jawaban:
Cara terbaik untuk melakukannya adalah dengan menggunakan parameter posisi. Dan
$()
yang lebih disukai untuk perintah substitusi backticks ove karena itu lebih mudah dibaca (tidak bingung dengan tanda kutip tunggal) dan dapat dengan mudah bersarang tanpa harus melakukan banyak melarikan diri.Garis bawah adalah pengganti untuk
$0
.sumber
Untuk apa?
Atau gunakan
bash -c
jika Anda benar-benar harus:sumber
bash -c
atau serupa.Satu-satunya cara untuk menggunakannya (AFAIK) adalah menempatkannya dalam file skrip bash dan menggunakan skrip di -exec. Sama halnya dengan
$()
sumber
Jangan lupa
xargs
! Contoh Anda akan meminta proses shell baru untuk setiap file yang ditemukan.Saya lebih suka ini:
find ... | xargs stat -c "Blah: %a"
find
menampilkan daftar semua yang ditemukan,xargs
membaca daftar argumen distdin
dan mengeksekusi parameternya dengan argumen-argumen di baris perintah, membangun selama baris perintah mungkin. Ini bekerja karenastat
, seperti kebanyakan perintah / program lain yang tepat, mengambil sejumlah parameter. (bandingkanls
,rm
danecho
misalnya)Jika Anda merasa perlu untuk meluncurkan proses baru untuk setiap file, gunakan
xargs -n 1
hanya untuk mengirimkan1
parameter ke setiap perintah. Dengan begitu Anda dapat meniru metode yang tidak efisien seperti ini:find ... | xargs -n 1 stat -c "Blah: %a"
(Cobalah di sistem file besar di komputer yang lambat dan pertahankan waktu perbedaannya!)
sumber