呈现数据-重定向-输入输出描述符
linux标准文件描述符
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
- 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
- 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
- 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
如果希望 stderr 重定向到 file,可以这样写:
$ command 2 > file
如果希望 stderr 追加到 file 文件末尾,可以这样写:
$ command 2 >> file
在脚本中重定向输出
两种方式:
临时重定向行输出
永久重定向脚本中的所有命令
在重定向到文件描述符时,你必须在文件描述符数字之前加一个&:
echo "this is an error message" >&2
也可以将STDERR和STDOUT的输出重定向到同一个输出文件。为此bash shell提供了特殊的重定向符号&>.
当使用&>时,命令生产的所有输出都会发送到同一位置,包括数据和错误。
默认情况下,linux会将STDERR导向STDOUT。
如果在运行脚本时重定向了STDERR,脚本中所有导向STDERR的文本都会被重定向。
./test 2> test4
将test文件的所有错误重定向到test4文件中。
永久从定向
在脚本中使用exec命令重定向:
在某脚本中用: exec 1>testout
把标准输出重定向到testout文件。
自定义重定向
文件描述符不止有3个,3~8都可以用来自定义文件描述符。
可以利用自动以文件描述符,重定向标准文件描述符,实现一个文件中的文件描述符来回切换。
例:
exec 3>&1
exec 1>testout
exec 1>&3
3重定向到1,也就是stdout,1重定向到testout文件,最后在把1重定向到3,也就是标准输出。
如果要关闭一个文件描述符,就把它重定向到特殊符号 &-。
exec 3>&-
在脚本中一旦关闭,就不可以在使用文件描述符。否则会报错。
/dev/null 文件
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
$ command > /dev/null
/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
如果希望屏蔽 stdout 和 stderr,可以这样写:
$ command > /dev/null 2>&1