วิธีอ่านไฟล์ dash


15

ฉันจะอ่านไฟล์เส้นประจากเทอร์มินัลอื่นนอกเหนือจากการลบด้วย ./

ตัวอย่างเช่นการอ่าน- fileเราสามารถอ่านได้โดย

cat ./-file_name

ถาม:มีวิธีอื่นในการทำสิ่งเดียวกันหรือไม่?


4
วิธีที่แนะนำคือใช้./คำนำหน้า มันเป็นแบบพกพามากที่สุด (คำถามที่พบบ่อยเกี่ยวกับ Unix ยุค Usenet)
Olivier Dulac

find . -name "-filename" | xargs catจะส่ง. /- ชื่อไฟล์ผ่านไปป์ สำหรับกรณีของคุณ (เข้าใจง่าย?) แต่อาจช่วยในไดเรกทอรี / สคริปต์ขนาดใหญ่
วอลเตอร์

คำตอบ:


11

สำหรับคำสั่งที่รับอินพุตจาก stdin คุณสามารถใช้การเปลี่ยนเส้นทาง:

cat <-file_name

ยาอันนี้ใช้งานได้ :) คือฉันได้ 3 วิธีในการอ่านโดยใช้.
vidhan

22

ใช้สองครั้ง--เพื่อทำเครื่องหมายสิ้นสุดตัวเลือก:

cat -- -<FILENAME>

โปรแกรมอื่น ๆ เช่นtouch, rmหรือgit checkoutยังทำตามอนุสัญญานี้:

$ 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

คำเตือน:มันเป็นวิธีปฏิบัติที่ดีที่จะใช้--หลังจากrmในสคริปต์เสมอ ผู้โจมตีสามารถวาง--rfไฟล์ในไดเรกทอรีและrm *จะใช้เป็นพารามิเตอร์รัน ดูนี่:

$ 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

โอ๊ะโอเราไม่ได้หมายถึงเราไม่ต้องการลบไดเรกทอรี เราควรใช้--:

$ 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

3
คุณไม่สามารถเชื่อใจได้ในทุกการใช้งานโปรแกรม--: หลายคนทำ แต่ไม่ทั้งหมด
เกล็นแจ็คแมน

2
จริงๆ? ฉันไม่ได้บอกว่าทุกโปรแกรมใช้งาน--ได้ฉันบอกว่ามีบางอย่างที่ทำ
Arkadiusz Drabczyk

1
@ vidhan: ฉันไม่ได้ตระหนักถึงตัวเลือกอื่น ๆ
Arkadiusz Drabczyk

1
@ Vidhan คุณสามารถทำให้ชีวิตของคุณยุ่งเหยิงโดยไม่มีเหตุผลและทำสิ่งที่ชอบfind . -name '-file_name' -exec cat {} \;แต่จริงๆแล้วมันไม่ได้ชี้ให้เห็นอะไรมากนัก
terdon

2
ไม่สามารถใช้งานได้หากไฟล์มีชื่อ-และไม่มีอะไรอีกแล้ว? สิ่งนี้เกิดขึ้นใน wargame: overthewire.org/wargames/bandit/bandit2.html
ThisClark

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.