Score:0

cat : ห้ามอ่าน stdin ถ้าไม่ได้ระบุไฟล์อินพุตบนบรรทัดคำสั่ง

ธง ph

ฉันมีสคริปต์ที่เชื่อมไฟล์ด้วย แมว. มันมีบรรทัดต่อไปนี้คร่าว ๆ ที่หยุดสคริปต์ในการอ่านอินพุตมาตรฐาน หากไดเร็กทอรีไม่มีไฟล์:

แมว /path/to/dir/* > concat.txt

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

raj avatar
cn flag
raj
ในกรณีของคุณ หากไม่มีไฟล์อยู่ที่ `/path/to/dir/*` `cat` จะแสดงข้อความแสดงข้อผิดพลาดและไม่อ่านอะไรเลยจาก stdin ได้ลองจริงไหม? `cat` อ่านจาก stdin ก็ต่อเมื่อมี **ไม่มีพารามิเตอร์อยู่** ไม่ใช่ถ้ามี **เป็น** พารามิเตอร์ที่ระบุไฟล์ที่ไม่มีอยู่จริง
Score:3
ธง us

ดูเหมือนว่าคุณมี nullglob เปิดใช้งานเพื่อให้ /เส้นทาง/ถึง/dir/* ขยายเป็นไม่มีอะไรหากไม่มีไฟล์อยู่ /เส้นทาง/ถึง/dir/. แน่นอนคุณสามารถปิดการใช้งานได้ nullglob (shopt -u nullglob) และรับพฤติกรรมเริ่มต้นโดยที่ /เส้นทาง/ถึง/dir/* ยังคงเหมือนเดิมหากไม่มีอะไรตรงกันและ แมว จะบ่นเกี่ยวกับไฟล์ที่ไม่มีอยู่จริง:

$ cat /path/to/dir/*
cat: '/path/to/dir/*': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

คุณยังสามารถจัดการกับ /dev/null ในตอนท้ายแทน:

$ shopt -s nullglob; แมว /path/to/dir/* /dev/null
$ก้อง$?
0

แมว จะได้รับ EOF ทันทีจาก /dev/nullดังนั้นจะไม่เขียนอะไรและออก

Serge Rogatch avatar
ph flag
ขอบคุณ แนวคิด `/dev/null` ดึงดูดใจเป็นพิเศษ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา