hello
我有一个包含以下代码的可执行脚本,
#!/bin/bash
echo "hello" > /dev/tty
我想将其输出重定向到/dev/null
.
./hello > /dev/null 2>&1
不起作用,因为它仅重定向stdout
和stderr
。
我找到了两个答案,声称这可以使用script
命令来完成,但他们没有解释如何做。
https://unix.stackexchange.com/a/297237/421466
https://unix.stackexchange.com/a/296108/421466
或者有没有其他方法可以抑制其输出?
答案1
改变脚本
假设文件描述符 3 尚未使用:
#!/bin/bash
exec 3>/dev/tty
#exec 3>/dev/null
echo "hello" >&3
你打开fd 3 到/dev/tty
或/dev/null
,轻松切换。然后全部替换> /dev/tty
为>&3
.
不改变脚本
脚本之外的解决方案是创建一个挂载命名空间 ( man unshare
),mount --bind /dev/null /dev/tty
在其中执行,然后在那里运行未修改的脚本。