“ </ dev / null” หมายถึงอะไร


16

ฉันเข้าใจการ> /dev/nullเปลี่ยนเส้นทางสิ่ง/dev/nullที่ทำหน้าที่เหมือนหลุมดำ อย่างไรก็ตามฉันไม่เข้าใจความ< /dev/nullหมาย ฉันเห็นสคริปต์ที่เขียนแบบนี้:

nohup myprogram > foo.out 2> foo.err < /dev/null &

ดังนั้น< /dev/nullในรหัสข้างต้นหมายความว่าอย่างไร

นี่คือตัวอย่างที่แนะนำ


เป็นไปได้ที่ซ้ำกันของตัวควบคุมและการเปลี่ยนเส้นทางของเชลล์คืออะไร?   นอกจากนี้ยังมีข้อสงสัยคล้ายกับสิ่งที่<&-ทำ
G-Man กล่าวว่า 'Reinstate Monica'

คำตอบ:


19

เป็นการรับรองว่าสตรีม I / O ทั้งหมดจะถูกคิดเป็น / ครอบครอง

ด้วยวิธีนี้กระบวนการที่อยู่เบื้องหลังไม่มีอะไรที่ "ผูก" กับเทอร์มินัลเพื่อให้คุณสามารถไปเกี่ยวกับธุรกิจของคุณโดยที่โปรแกรมของคุณพยายามอ่านจาก TTY ซึ่งจะทำให้เทอร์มินัลหยุดทำงาน

ในกรณีนี้เนื่องจากคุณเปิดใช้งานกระบวนการผ่าน ssh จากเชลล์สคริปต์ตรวจสอบให้แน่ใจว่าสคริปต์สามารถเลื่อนตามหมายเลขที่ไม่มีภาระ


มันสันนิษฐานว่า myprogram รับอินพุตบางส่วน แต่ในกรณีนี้ myprogram จะป้อนอะไรเป็นอินพุต?
Qian Chen

ขอบคุณ < /dev/nullผมเข้าใจส่วนที่เหลือทั้งหมดยกเว้น
Qian Chen

ดังนั้นความแตกต่างระหว่างรหัสและรหัสเดียวกันโดยไม่ต้อง< /dev/nullคืออะไร?
Qian Chen

ฉันอ่านรหัสจากที่นี่จริง ๆ : stackoverflow.com/questions/29142/…
Qian Chen

2
ดีใจที่มันช่วย! ขอโทษเกี่ยวกับ runaround; บริบทช่วยแม้ว่าขอบคุณ! - ข้อควรระวัง: ฉันจะลบความคิดเห็นของฉันภายในไม่กี่นาทีหรือสองนาทีตอนนี้สิ่งต่าง ๆ ถูกตอกตะปูมันดูสับสนสำหรับคนอื่นที่เห็นมัน
user3276552

12

program </dev/nullหมายถึงว่าprogramคือการโต้แย้งปัจจัยการผลิต (สามารถพารามิเตอร์สำหรับการป้อนไปที่ตัวเลือกหรือสามารถใส่ไฟล์เพื่อใช้งานบน) ผ่านไฟล์อธิบาย 0 เช่น STDIN /dev/nullจากไฟล์

ดังที่คุณทราบแล้วว่า/dev/nullไม่มีอะไรเลยมันจะแจ้ง EOF (สิ้นสุดไฟล์) เมื่ออ่านดังนั้นโปรแกรมที่รับอินพุตจาก/dev/nullนั้นจะไม่มีการเปลี่ยนเส้นทางอะไรเป็นอาร์กิวเมนต์อินพุต


ดังนั้นมีความแตกต่างที่จะเพียงแค่ออก< /dev/nullไปไหน เพียงแค่เขียนมันเป็นnohup myprogram > foo.out 2> foo.err &
เควนเฉิน

1
@ElgsQianChen นั้นขึ้นอยู่กับคุณprogram.. มันต้องการเป็น STDIN เหรอ? บางโปรแกรมอาจบังคับให้คุณต้องใส่อะไรบางอย่างเป็น STDIN นี่อาจเป็นกรณีที่คุณเพิ่งใช้/dev/nullเป็น STDIN และปล่อยให้โปรแกรมทำการประมวลผลและวาง STDOUT และ STDERR ในไฟล์ที่กล่าวถึง ..
heemayl

ดังนั้นมันจะป้องกันการป้อนข้อมูลใด ๆ อย่างมีประสิทธิภาพจากการปิดกั้นกระบวนการและเพียงแค่ฟีดอะไรกับการร้องขอการป้อนข้อมูลใด ๆ ?
Qian Chen

1
@ElgsQianChen มันจะบล็อกตัวอธิบายไฟล์ 0 นั่นคือ STDIN ดังนั้นคุณจึงไม่สามารถผ่านอินพุตเพิ่มเติมได้อีกหากไม่มีการตั้งค่า FD อื่น ๆ ที่จะรับอินพุตจากคุณคุณจะไม่สามารถป้อนข้อมูลเพิ่มเติมให้กับโปรแกรมได้อีก ..
heemayl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.