Jos*_*osh 2 zsh io-redirection
我想在脚本中途重新定向标准输出。我怎样才能在 Zsh 中做到这一点?
# Do something
# ...
# Redirect stdout to a file (e.g. foo.txt)
for x in *;
print $x;
done
# Re-direct stdout back to default
# Do something else
# ...
Run Code Online (Sandbox Code Playgroud)
使用exec
带有重定向但没有命令的内置命令来重定向 shell 的文件描述符。如果要恢复原始目的地,则必须将其保存在另一个描述符中。
exec 3>&1 >foo.txt
for x in *; do
print $x
done
exec >&3 3>&-
Run Code Online (Sandbox Code Playgroud)
当重定向的范围是代码的一部分时,将重定向放在那段代码周围会更简单。
for x in *; do
print $x
done >foo.txt
Run Code Online (Sandbox Code Playgroud)
如果要将重定向应用于指令序列,请将其放在大括号内。
{
for x in *; do
print $x
done;
echo 'one more line'
} >foo.txt
Run Code Online (Sandbox Code Playgroud)
这些构造存在于所有 Bourne/POSIX 风格的 shell 中,而不仅仅是在 zsh 中。