![UNIX 重定向到文件而无需写入权限系统处理](https://linux22.com/image/1524152/UNIX%20%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E6%96%87%E4%BB%B6%E8%80%8C%E6%97%A0%E9%9C%80%E5%86%99%E5%85%A5%E6%9D%83%E9%99%90%E7%B3%BB%E7%BB%9F%E5%A4%84%E7%90%86.png)
我正在学习 UNIX 环境,有一个问题..当将 std 错误重定向到文件时,如果我们重定向到的文件拒绝用户的写权限,会发生什么?
例子:
./command >file 2>&1
./command 2>&1 >file
错误消息首先会发生什么?它会自动被丢弃吗?两行都出现相同的错误,权限被拒绝,但由于系统从左到右读取,处理方式有什么不同?
任何涉及其背后机制的教程链接都会很有帮助,到目前为止,我只能找到有关如果我们有写权限的话它如何处理它的信息。
答案1
简短的回答:该命令根本不会执行。
解释:重定向基于文件描述符,在执行进程之前,需要使用“open()”调用来创建文件描述符。
我的 bash 干脆拒绝了它:
$ sleep 1 2>&1 > /nonwritable
-bash: /nonwritable: Permission denied
所以你看,大多数 shell 都有一个保护措施。