开发者手册

[ Shell ] 输入输出重定向(stdin, stdout,

2018-07-12  本文已影响0人  爱上落入尘世间的你

常用的文件描述符

/dev/stdin: 0
/dev/stdout: 1
/dev/stderr: 2
/dev/null: 黑洞

常用的操作

command > filename
# 重定向到某个文件, 如果文件已经存在则删除该文件,
# 文件不存在会新建, 因此命令成功与否原文件内容都会丢失

command >> filename
# 同 > 相似, 只不过是追加到文件末尾

command 1> filename (简写为 >)
# stdout重定向

command 2> filename
# stderr重定向

M > N
# 重定向 M 到 N
# M 是一个文件描述符, 默认为 1 (stdout)
# N 是一个文件描述符

M >& N
# M 合并到 N
# M 是一个文件描述符, 默认为 1 (stdout)
# N 是一个文件描述符

M >& N (zsh下无效, 原因不明)
同
M &> N
# `>&` 或者 `&>` 是一个整体符号, 不要看成 `>` 和 `&`

常见用法

command > filename
等于
command 1> filename
# 重定向stdout覆盖到filename

command >> filename
等于
command 1>> filename
# 重定向stdout追加到filename

commamd 2> filename
# 重定向stderr覆盖到filename

command 2>> filename
# 重定向stderr追加到filename

command &> filename
# 重定向stdout和stderr覆盖到filename

注意

如果一行命令stdout和stderr都不为空, 
那么stderr的内容在stdout的内容的前面

ls > out.txt 2>&1 (1)
不等同于
ls 2>&1 >out.txt (2)

(1) stdout重定向到out.txt,然后stderr重定向到stdout(现在是out.txt)
(2)stderr重定向到stdout, 这时会产生一个stdout的拷贝,
作为程序的stderr, 然后原来的stdout重定向到out.txt, 
拷贝的stdout没有作用, 结果是stderr没了, 原来的
stdout重定向到文件中去了

参考

http://www.runoob.com/linux/linux-shell-io-redirections.html
https://blog.csdn.net/win_turn/article/details/50379465
https://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html

上一篇 下一篇

猜你喜欢

热点阅读