在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。而是永远不会运行该程序。
为什么会这样,bash在执行程序之前如何选择执行的“检查”的顺序?是否还要执行其他检查?
ps我试图确定在cron下运行的程序在重定向到“权限被拒绝”文件时是否真的运行了。
write_file.py
程序,并将其输出发送到~root/log
bash:“对不起,但是您不能写入该文件!” Shell确实在执行应执行的操作。如果它无法执行您要求的操作,这样做,它会立即通知您为什么会出现问题,让您有机会决定如何处理它。如果足够重要,您指定了保存位置,那么ASS | U | ME可以在不保存stdout的情况下运行是不对的
stdout
到完全做到这一点。因此,即使您的程序已运行,您也不会看到任何输出。