การใช้ </ dev / null & ในบรรทัดคำสั่ง


12

ฉันพยายามรันโปรแกรมจาวาตัวอย่างโดยใช้บรรทัดคำสั่งต่อไปนี้ อย่างไรก็ตามฉันไม่ทราบว่าส่วนต่อท้ายที่< /dev/null &ใช้มีไว้เพื่ออะไร

java   -cp  /home/weka.jar weka.classifiers.trees.J48 t train_file  >& log < /dev/null &

คำตอบ:


21

< /dev/nullใช้เพื่อส่ง EOF ไปยังโปรแกรมทันทีเพื่อที่จะไม่รออินพุต ( /dev/nullอุปกรณ์ null เป็นไฟล์พิเศษที่ทิ้งข้อมูลทั้งหมดที่เขียนไป แต่รายงานว่าการดำเนินการเขียนสำเร็จและไม่ให้ข้อมูลกับ กระบวนการใด ๆ ที่อ่านจากมันให้ EOF ทันที) &เป็นตัวคั่นคำสั่งชนิดพิเศษที่ใช้เพื่อแบ็กกราวน์กระบวนการก่อนหน้า

ฉันไม่รู้ว่าจะต้องเรียกใช้โปรแกรมด้วยวิธีนี้โดยไม่ทราบว่าโปรแกรมถูกเรียกใช้อย่างไร


6

</dev/nullตัดการเชื่อมต่ออินพุตของโปรแกรมจากเทอร์มินัล บางโปรแกรมมีปฏิกิริยาแตกต่างกันไปตามสิ่งที่อินพุตมาตรฐานเชื่อมต่อ ด้วยการเปลี่ยนเส้นทาง</dev/nullโปรแกรมสามารถบอกได้ว่าอินพุตของมันไม่ได้มาจากเทอร์มินัลและจะได้รับการบ่งชี้การสิ้นสุดไฟล์ทันทีถ้ามันพยายามอ่านจากอินพุตมาตรฐาน

การโลน&ในตอนท้ายทำให้โปรแกรมทำงานในพื้นหลัง ซึ่งหมายความว่าคุณจะได้รับพรอมต์เชลล์ทันที หากไม่มี&คุณจะได้รับพรอมต์เชลล์กลับมาเฉพาะเมื่อโปรแกรมดำเนินการเสร็จสิ้น

โปรดทราบว่าแบบสแตนด์อโลนไม่เกี่ยวข้องกับ& เป็นโอเปอเรเตอร์การเปลี่ยนเส้นทาง (ใน tcsh, bash และ zsh) ซึ่งเปลี่ยนเส้นทางทั้งเอาต์พุตมาตรฐานของโปรแกรมและข้อผิดพลาดมาตรฐานของโปรแกรมไปยังชื่อไฟล์ที่ระบุหลังจากโอเปอเรเตอร์ (ที่นี่)>&>&log

กล่าวอีกนัยหนึ่งสิ่งที่เชลล์ทำเมื่อเห็นบรรทัดคำสั่งนี้คือ:

  • เริ่มต้นกระบวนการในพื้นหลัง ในกระบวนการพื้นหลัง:
    • เชื่อมต่ออินพุตมาตรฐานกับ/dev/null( อุปกรณ์ null )
    • เชื่อมต่อทั้งเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐานกับไฟล์ที่เรียกว่าlog(การสร้างไฟล์หากยังไม่มีอยู่และตัดทอนหากมีอยู่)
    • มองหาแฟ้มที่ปฏิบัติการที่เรียกว่าในjava$PATH
    • เรียกใช้ไฟล์ที่มี 5 ข้อโต้แย้ง-cp, /home/weka.jar, weka.classifiers.trees.J48, –t, train_file`
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.