ใน bash ฉันสังเกตเห็นว่าหากคำสั่งที่ใช้การเปลี่ยนเส้นทางจะล้มเหลวโปรแกรมใด ๆ ที่ทำงานก่อนหน้านั้นจะไม่ทำงาน
ตัวอย่างเช่นโปรแกรมนี้เปิดไฟล์ "a" และเขียน 50 ไบต์ไปยังไฟล์ "a" อย่างไรก็ตามการรันคำสั่งนี้ด้วยการเปลี่ยนเส้นทางไปยังไฟล์ที่มีสิทธิ์ไม่เพียงพอ (~ root / log) ทำให้ไม่มีการเปลี่ยนแปลงขนาดไฟล์ของ "a"
$ ./write_file.py >> ~root/log
-bash: /var/root/log: Permission denied
cdal at Mac in ~/experimental/unix_write
$ ls -lt
total 16
-rw-rw-r-- 1 cdal staff 0 Apr 27 08:54 a <-- SHOULD BE 50 BYTES
ใคร ๆ ก็คิดว่าโปรแกรมจะทำงานเรียกใช้เอาต์พุตใด ๆ (แต่เขียนไปยังไฟล์ "a") แล้วไม่สามารถเขียนเอาต์พุตใด ๆ ไปยัง ~ root / log แต่โปรแกรมจะไม่ทำงาน
เหตุใดจึงเป็นเช่นนี้และทุบตีเลือกลำดับของ "การตรวจสอบ" ที่ทำงานก่อนที่จะดำเนินการโปรแกรมอย่างไร มีการตรวจสอบอื่น ๆ เช่นกันหรือไม่?
ป.ล. ฉันพยายามที่จะตรวจสอบว่าโปรแกรมทำงานภายใต้ cron ทำงานจริงเมื่อเปลี่ยนเส้นทางไปยังไฟล์ "สิทธิ์ถูกปฏิเสธ"
write_file.py
โปรแกรมและส่งออกไปยัง~root/log
bash:" ขออภัย แต่คุณไม่ได้รับอนุญาตให้เขียนไปยังไฟล์นั้น! "เชลล์ทำสิ่งที่ควรทำถ้ามันไม่สามารถทำสิ่งที่คุณถาม ทำมันจะแจ้งให้คุณทราบทันทีว่าเหตุใดจึงเกิดปัญหาทำให้คุณมีโอกาสตัดสินใจว่าจะจัดการกับมันอย่างไรสำหรับผู้ดูแลระบบทุบตีทุกคนรู้ว่าสิ่งเลวร้ายมากอาจเกิดขึ้นได้หากคุณเรียกใช้คำสั่งนั้นและไม่บันทึกผลลัพธ์ หากมีความสำคัญพอที่คุณกำหนดสถานที่เพื่อบันทึกมันจะผิดกับ ASS | U | ME มันก็โอเคที่จะทำงานโดยไม่บันทึก stdout
stdout
ให้ทำอย่างนั้น ดังนั้นคุณจะไม่เห็นผลลัพธ์ใด ๆ แม้ว่าโปรแกรมของคุณจะทำงาน