我正在学习 UNIX 环境,有一个问题..当将 std 错误重定向到文件时,如果我们重定向到的文件拒绝用户的写权限,会发生什么?
例子:
./command >file 2>&1
./command 2>&1 >file
错误消息首先会发生什么?它会自动被丢弃吗?两行都出现相同的错误,权限被拒绝,但由于系统从左到右读取,处理方式有什么不同?
任何涉及其背后机制的教程链接都会很有帮助,到目前为止,我只能找到有关如果我们有写权限的话它如何处理它的信息。
答案1
简短的回答:该命令根本不会执行。
解释:重定向基于文件描述符,在执行进程之前,需要使用“open()”调用来创建文件描述符。
我的 bash 干脆拒绝了它:
$ sleep 1 2>&1 > /nonwritable
-bash: /nonwritable: Permission denied
所以你看,大多数 shell 都有一个保护措施。