在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...