เครื่องมือ Unix: จะเกิดอะไรขึ้นถ้าไฟล์ชื่อมีอะไรลบ?


9

ฉันมักจะสงสัยอยู่เสมอ: เครื่องมือ GNU / Unix ส่วนใหญ่ใช้ตัวเลือกในรูปแบบ "ลบบางอย่าง" บางครั้งตามด้วยการโต้แย้ง ถ้าคุณมีไฟล์ชื่อลบด้วยอะไร

$ ls
-f
$ rm -f
$ ls
-f
$ mv -f abc
mv: missing destination file operand after `abc'
Try `mv --help' for more information.
$ cat -f
cat: invalid option -- 'f'
Try `cat --help' for more information.

หรือ

$ ls
-ohello.c
$ gcc -ohello -ohello.c
gcc: fatal error: no input files
compilation terminated.

นี่เป็นเพราะความอยากรู้ ฉันไม่มีกรณีใช้งานสำหรับสิ่งนี้


คุณต้องหาวิธีผ่านตัวอักษรสตริง "-f" ไปยังการเรียกของระบบ โดยปกตินั่นคือการหลบหนีอย่างระมัดระวัง
เฟล็กโซ

2
ไปที่ผู้ลงคะแนนเสียง 'ปิดเพราะไม่อยู่หัวข้อ': นี่เป็นคำถามเกี่ยวกับการเขียนโปรแกรมเชลล์และวิธีหลีกเลี่ยงปัญหา มันเป็นเรื่องของ SO (OTOH อาจเป็นเรื่องซ้ำซ้อนปัญหาคือการค้นหาคำถามอื่นที่เกี่ยวข้อง)
Jonathan Leffler

มีความเป็นไปได้ที่ซ้ำกันของฉันจะลบไฟล์ชื่อ "-p" จาก bash ได้อย่างไร
user1686

คำตอบ:



10

เป็นเรื่องปกติที่จะถามคำถามประเภทนี้ในการตั้งค่าการสัมภาษณ์ วิธีทั่วไปในการจัดการไฟล์ที่มีขีดกลางคือ:

$ rm -- -f
$ rm ./-f

6

คำถามทั่วไปใน Unix วิธีหลักคือการตั้งชื่อพา ธ แบบเต็มให้กับไฟล์ดังนั้นจึงไม่มีเส้นประอยู่ด้านหน้า:

$ rm -file.txt
unknown option -l

$ rm ./-file.txt    #No problem!
$ rm $PWD/-file.txt #Same thing

คำสั่งบางคำสั่งคุณสามารถใช้เครื่องหมายขีด (หรือเครื่องหมายขีดกลาง) เพื่อสิ้นสุดตัวเลือก อย่างไรก็ตามสิ่งนี้ไม่จำเป็นต้องเป็นจริงกับคำสั่งทั้งหมดหรือแม้แต่คำสั่งเดียวกันในระบบที่แตกต่างกัน

$ rm -- -file.txt   #Works on Linux but not on some Unix systems

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