Bash

從正在執行的腳本重定向標準輸出

  • January 17, 2022

在 C 中,您可以在程序執行時將標準輸出重定向到某個地方,例如:

int fd = open("some_file", O_RDWR);
dup2(fd, STDOUT_FILENO);
printf("write to some_file\n");

我可以在執行 bash 腳本 ( ./script.sh > some_file) 時在 bash 中實現此目的而不重定向標準輸出嗎?

您可以圍繞任何命令使用重定向,包括複合命令。例如:

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。

引用自:https://unix.stackexchange.com/questions/686735