ตัวแยกวิเศษระหว่างชื่อไฟล์ในเอาต์พุต ls คืออะไร


20

ผลลัพธ์ของls(โดยไม่มีข้อโต้แย้ง) ปรากฏขึ้นเพื่อแยกชื่อไฟล์ด้วยการแยกบรรทัด

หลักฐาน:

  • ls | grep fooทำงานตามที่คาดไว้โดยให้grepแต่ละชื่อไฟล์เป็นบรรทัดแยกของอินพุต

  • ls > files.txt; vim files.txt -> ใน Vim แต่ละไฟล์อยู่บนบรรทัดแยกต่างหาก

และในเทอร์มินัลผลลัพธ์ของการlsวางหลายไฟล์ในหนึ่งบรรทัดโดยแยกชื่อไฟล์ด้วยช่องว่างเพื่อสร้างคอลัมน์ที่จัดเรียงอย่างสวยงาม:

$ ls
a.txt  b.txt  c.txt

ดังนั้นคำถามของฉันคือ ls ทำเช่นนี้ได้อย่างไร

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

คำตอบ:


24

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

ใช่. จากคู่มือฉบับเต็ม (มีให้ผ่านinfo lsหากติดตั้งเอกสารประกอบ):

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

หากคุณชอบเอาต์พุตคอลัมน์หนึ่งคุณสามารถเรียกใช้

ls -1

เพื่อรับมันใน terminal เช่นกัน


7
โดยเฉพาะฟังก์ชั่นการใช้งานในการตรวจสอบหรือไม่ว่าการส่งออกเป็นขั้วls isatty(3)
Blrfl

ค่อนข้างเกี่ยวข้องด้วยหากต้องการทดสอบในเชลล์สคริปต์อย่างง่ายสามารถเรียกใช้tty -sและตรวจสอบสถานะการส่งคืน
Daniel Andersson

10

lsตรวจพบเมื่อคุณส่งออกไปป์ คุณสามารถดูได้ในเอกสารประกอบ:

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

หากคุณต้องการให้แต่ละไฟล์ในผลลัพธ์ที่จะวางบนบรรทัดแยกโดยไม่คำนึงถึงการเปลี่ยนเส้นทางไปป์คุณสามารถใช้

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