20. I/O 重定向
COMMAND_OUTPUT >
# 重定向标准输出到一个文件.
# 如果文件不存在则创建,否则覆盖.
ls -lR > dir-tree.list
# 创建了一个包含目录树列表的文件.
: > filename
# ">" 清空了文件.
# 如果文件不存在,则创建了个空文件 (效果类似 'touch').
# ":" 是个虚拟占位符, 不会有输出.
> filename
# ">" 清空了文件.
# 如果文件不存在,则创建了个空文件 (效果类似 'touch').
# (结果和上述的 ": >" 一样, 但在某些 shell 环境中不能正常运行.)
COMMAND_OUTPUT >>
# 重定向标准输出到一个文件.
# 如果文件不存在则创建,否则新内容在文件末尾追加.
# 单行重定向命令 (只作用于本身所在的那行):
# --------------------------------------------------------------------
1>filename
# 以覆盖的方式将 标准错误 重定向到文件 "filename."
1>>filename
# 以追加的方式将 标准输出 重定向到文件 "filename."
2>filename
# 以覆盖的方式将 标准错误 重定向到文件 "filename."
2>>filename
# 以追加的方式将 标准错误 重定向到文件 "filename."
&>filename
# 以覆盖的方式将 标准错误 和 标准输出 同时重定向到文件 "filename."
# 在 bash 4 中才有这个新功能.
M>N
# "M" 是个文件描述符, 如果不明确指定,默认为 1.
# "N" 是个文件名.
# 文件描述符 "M" 重定向到文件 "N."
M>&N
# "M" 是个文件描述符, 如果不设置默认为 1.
# "N" 是另一个文件描述符.
#==============================================================================
# 重定向 标准输出,一次一行.
LOGFILE=script.log
echo "This statement is sent to the log file, \"$LOGFILE\"." 1>$LOGFILE
echo "This statement is appended to \"$LOGFILE\"." 1>>$LOGFILE
echo "This statement is also appended to \"$LOGFILE\"." 1>>$LOGFILE
echo "This statement is echoed to stdout, and will not appear in \"$LOGFILE\"."
# 这些重定向命令在每行结束后自动"重置".
# 重定向 标准错误,一次一行.
ERRORFILE=script.errors
bad_command1 2>$ERRORFILE # Error message sent to $ERRORFILE.
bad_command2 2>>$ERRORFILE # Error message appended to $ERRORFILE.
bad_command3 # Error message echoed to stderr,
#+ and does not appear in $ERRORFILE.
# 这些重定向命令每行结束后会自动“重置”.
#=======================================================================注意
Last updated