我有以下 bash 脚本:
exec '/mnt/c/Users/WindowsUserName/AppData/Local/Programs/Microsoft VS Code/Code.exe' $@ &>/dev/null &
当我运行脚本时我得到
➜ ~ ./code foo.js
➜ ~
[main 2021-11-18T17:54:12.206Z] update#setState idle
[main 2021-11-18T17:54:42.215Z] update#setState checking for updates
[main 2021-11-18T17:54:42.435Z] update#setState idle
^ 输出没有被重定向到/dev/null
.有人有什么想法吗?
谢谢
答案1
通常stdin
、stdout
、 和stderr
指向终端。该引用被破坏&>/dev/null
(除了stdin
)。但这些引用并不是进程写入终端的唯一方式。
ctty=$(awk '{ print $7}' /proc/self/stat)
echo "controlling tty: $(( (ctty>>8) & 255 )):$(( (ctty>>20) + (ctty&255) ))"
进程可以打开其控制终端并直接写入。这可以通过 来防止nohup
。
答案2
&
重定向之前将命令exec
与控制台分离。现在,您正在分离该exec
命令,然后创建一个重定向到的空命令/dev/null
并分离该命令。我相信您想要删除&
前面的>/dev/null
并保留另一个,以便命令正确重定向和分离。