shell IO
shell脚本或者Linux终端上,常用的IO文件描述符有三个:
- 0 标准输入(stdin)
- 1 标准输出 (stdout)
- 2 标准错误 (stderr)
标准输入一般为键盘,标准输出和标准错误一般都是显示器。可以在shell脚本的后面添加 >filename,将标准输出重定向到文件中。
重定向
一般情况下,shell脚本的标准输出和标准错误都是输出到显示器上的,我们可以通过IO重定向,将标准输出和标准错误重定向其他文件或设备。
IO重定向的一般形式如下:
$ echo "hello,world" > filename $ echo "hello,world` 1>filename $ echo "some errors" 2>error
- & 是一个描述符,如果1或2前不加&,会被当成一个普通文件。
- 1>&2 意思是把标准输出重定向到标准错误.
- 2>&1 意思是把标准错误输出重定向到标准输出。
- &>filename 意思是把标准输出和标准错误输出都重定向到文件filename中
示例
#!/usr/bin/env bash set -uxe echo "error" >&2 #将error输出到标准出错 echo "succ" >&1 #将succ输出到标准输出 注意:2和1之前需要&,否则,其会被当作文件名,并且>前后不能有空格。
$ ./io.sh 2>stderr 1>stdin #将标准输出重定向到stdin文件,标准错误输出到stderr文件,注意,2与>,1与>之间没有空格。
$ ./io.sh 1>stdin 2>&1 #将标准错误和标准输出都重定向到stdin文件中。 $ cat stdin error stdin
$ ./io.sh 2>stderr 1>&2 #将标准错误和标准输出重定向到stderr文件。 $ ./io.sh &>stderr #将标准错误和标准输出重定向到stderr文件,与第一个运行方式效果相同。 注意:>前后不要有空格。 $ cat stderr error stdin
$ ./io.sh &>/dev/null #标准输出和标准错误重定向到/dev/null设备