linux标准错误输入、输出和错误和文件重定向

1,803 阅读2分钟


在shell中执行命令时,没个进程都和三个文件相联系。并使用文件描述符来引用这些文件。

文件描述符不好记忆,shell同时给出了相应的文件名


文件描述符,及他们通常所对应的文件名
  • 0       输入文件--标准输入,           缺省是键盘,也可以是文件或其他命令的输出。
  • 1       输出文件--标准输出,           缺省是屏幕,也可以是文件。
  • 2       错误输出文件--标准错误        缺省是屏幕,也可以是文件。


文件重定向

在执行命令时,可以指定命令的标准输入、输出和错误,要实现就得使用2文件重定向。

eg:    /dev/null 2>&1

&号,后面接的是必须的文件描述符。 不能写成2>1,这样就成了标准错误重定向到文件名为1的文件中了,而不是重定向标准错误到标准输出中。

& 一般是表示产生一个子shell,即后台运行


常用的:


command > filename 把把标准输出重定向到一个新文件中               //默认当前路径

command 1 > fielname 把把标准输出重定向到一个文件中               //默认就是1

command >> filename 把把标准输出重定向到一个文件中   (追加)


command > filename 2>&1 把把标准输出标准错误一起重定向到一个文件中

command >> filename 2>&1 把把标准输出标准错误一起重定向到一个文件中  (追加)


command 2 > filename 把把标准错误重定向到一个文件中

command 2 >> filename 把把标准错误重定向到一个文件中            (追加)


实例:

/home/da/bcrun  -X &>>bcrunwatchlog.log
./ddd -X >> ddd_log/boot.log 2>&1       &           //标准
等同于:./ddd -X  1>> ddd_log/boot.log   2>&1
标准输出到ddd_log/boot.log中---1>> ddd_log/boot.log    
错误标准重定向到标准输出中---2>&1
最终就是,错误输出和标准输出都重定向到ddd_log/boot.log里面

错误的示例执行文件data

 data > output.txt         //失败,错误直接重定向到输出文件是不行的

 data 2> output.txt       //成功,将错误输出到output.txt文件

 data >&2 output.txt    //失败,标准输出到标准输出,而此时标准输出为空,output.txt为空



标准输入

我们创建了一个名为myfile的文件,并在其中使用了TERM和LOGNAME变量。

$cat >> myfile <<MAYDAY

> Hello there I am using a $TERIM terminal

> and my user name is $LOGNAME

> bye...

> MAYDAY


$ cat myfile

Hello there I am using a vt100 terminal

and my user name is dave

bye...