![从正在运行的脚本重定向标准输出](https://linux22.com/image/201095/%E4%BB%8E%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E8%84%9A%E6%9C%AC%E9%87%8D%E5%AE%9A%E5%90%91%E6%A0%87%E5%87%86%E8%BE%93%E5%87%BA.png)
在 C 中,您可以在程序运行时将 stdout 重定向到某个位置,例如:
int fd = open("some_file", O_RDWR);
dup2(fd, STDOUT_FILENO);
printf("write to some_file\n");
我可以在 bash 中实现此目的,而无需在运行 bash 脚本 ( ./script.sh > some_file
) 时重定向 stdout 吗?
答案1
您可以使用重定向围绕任何命令,包括复合命令。例如:
some_function () {
echo "This also $1 to the file"
}
{
echo "This goes to the file"
some_function "goes"
} >some_file
echo "This does not go to the file"
some_function "does not go"
您可以通过调用以下命令来执行永久重定向(直到脚本结束或被另一个重定向覆盖为止)exec
内置有重定向,但没有命令。例如:
foo () {
echo "This does not go to the file"
exec >some_file
echo "This goes to the file"
}
foo
echo "This still goes to the file"
这些功能在所有 Bourne/POSIX 风格的 shell 中都可用,包括 bash。