3
在代码“ {exec> / dev / null; }> / dev / null”是什么意思?
当您重定向包含exec重定向的命令列表时,此后exec> / dev / null似乎仍然没有被应用,例如: { exec >/dev/null; } >/dev/null; echo "Hi" 打印“ Hi”。 我的印象是,{}除非命令列表是管道的一部分,否则它不被视为子外壳,因此exec >/dev/null外壳在我看来仍应在当前的外壳环境中应用。 现在,如果将其更改为: { exec >/dev/null; } 2>/dev/null; echo "Hi" 没有预期的输出;对于以后的命令,文件描述符1仍指向/ dev / null。通过重新运行可以看到: { exec >/dev/null; } >/dev/null; echo "Hi" 没有任何输出。 我尝试制作脚本并对其进行分级,但是我仍然不确定此处到底发生了什么。 在此脚本的每一点上,STDOUT文件描述符发生了什么? 编辑:添加我的strace输出: read(255, "#!/usr/bin/env bash\n{ exec 1>/de"..., 65) = 65 open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) …