cara yang disarankan adalah menggunakan ./awalan. Ini yang paling portabel (lihat FAQ Unix era usenet)
Olivier Dulac
find . -name "-filename" | xargs catakan mengirim ./-filename melalui pipa. Untuk kasus Anda (disederhanakan?) Kesalahan, tetapi mungkin membantu dalam direktori / skrip besar.
Walter A
Jawaban:
11
Untuk perintah yang mendapat input dari stdin, Anda dapat menggunakan pengalihan:
ya ini bekerja :) jadi saya punya 3 cara untuk membacanya satu dengan menggunakan ./ lainnya dengan menggunakan - dan yang lain dengan menggunakan <, ada lagi cara untuk melakukan hal yang sama ??
vidhan
22
Gunakan ganda --untuk menandai ujung opsi:
cat ---<FILENAME>
Program lain seperti touch, rmatau git checkoutjuga mengikuti konvensi ini:
$ touch ---file
$ ll
total 0-rw-r--r--1 ja ja 0Mar1013:13-file
$ echo hi!>>-file
$ cat ---file
hi!
$ rm ---file
$ echo $?0
PERINGATAN: Ini praktik yang baik untuk selalu digunakan --setelah rmdalam skrip. Seorang penyerang dapat menempatkan --rffile dalam direktori dan rm *akan menganggapnya sebagai parameter yang dijalankan. Lihat ini:
$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch ---rf
$ rm *
$ ll
total 0-rw-r--r--1 ja ja 0Mar1013:21-rf
Ups, ini bukan maksud kami, kami tidak ingin menghapus direktori. Kita seharusnya menggunakan --:
$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch ---rf
$ rm --*
rm: cannot remove `dir': Is a directory
$ ll
total 4.0K
drwxr-xr-x 2 ja ja 4.0K Mar 10 13:22 dir
Anda tidak dapat mengandalkan setiap implementasi program --: banyak yang tetapi tidak semua.
glenn jackman
2
Betulkah? Saya tidak mengatakan bahwa semua program mengimplementasikan --, saya katakan menunjukkan beberapa yang dilakukan.
Arkadiusz Drabczyk
1
@vidhan: saya tidak mengetahui opsi lain.
Arkadiusz Drabczyk
1
@vidhan Anda juga dapat mempersulit hidup Anda tanpa alasan dan melakukan sesuatu seperti find . -name '-file_name' -exec cat {} \;tetapi sebenarnya tidak ada gunanya.
./
awalan. Ini yang paling portabel (lihat FAQ Unix era usenet)find . -name "-filename" | xargs cat
akan mengirim ./-filename melalui pipa. Untuk kasus Anda (disederhanakan?) Kesalahan, tetapi mungkin membantu dalam direktori / skrip besar.Jawaban:
Untuk perintah yang mendapat input dari stdin, Anda dapat menggunakan pengalihan:
sumber
Gunakan ganda
--
untuk menandai ujung opsi:Program lain seperti
touch
,rm
ataugit checkout
juga mengikuti konvensi ini:PERINGATAN: Ini praktik yang baik untuk selalu digunakan
--
setelahrm
dalam skrip. Seorang penyerang dapat menempatkan--rf
file dalam direktori danrm *
akan menganggapnya sebagai parameter yang dijalankan. Lihat ini:Ups, ini bukan maksud kami, kami tidak ingin menghapus direktori. Kita seharusnya menggunakan
--
:sumber
--
: banyak yang tetapi tidak semua.--
, saya katakan menunjukkan beberapa yang dilakukan.find . -name '-file_name' -exec cat {} \;
tetapi sebenarnya tidak ada gunanya.-
dan tidak ada yang lain? Ini muncul di wargame: overthewire.org/wargames/bandit/bandit2.htmlAlternatif menjadi aneh:
sumber