Cara membaca file dasbor

15

Bagaimana saya bisa membaca file dasbor dari terminal selain membatasi dengan ./

Misalnya untuk membaca - filekita dapat membacanya

cat ./-file_name

T: Apakah ada cara alternatif untuk mencapai hal yang sama?

vidhan
sumber
4
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:

cat <-file_name
cuonglm
sumber
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 0 Mar 10 13: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 0 Mar 10 13: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
Arkadiusz Drabczyk
sumber
3
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.
terdon
2
Ini tidak berfungsi jika file tersebut dinamai -dan tidak ada yang lain? Ini muncul di wargame: overthewire.org/wargames/bandit/bandit2.html
ThisClark
2

Alternatif menjadi aneh:

dd if=-x 2>/dev/null
Walter A
sumber