Linux文件的标准文件描述符
0 STDIN 标准输入
1 STDOUT 标准输出
2 STDERR 标准错误
重定向标准输出:
ls -a > text
重定向标准输入:
cat < textfile
重定向标准错误(将文件描述符放在>之前)
ls -al mich 2> error
如果将错误和输出同时重定向到一个文件 &>
ls -al text text1 &> log
在脚本中重定向输出:
1.临时重定向:在脚本中设置哪些语句需要在脚本执行时重定向。
在文件描述符之前加&.
echo "this is an error" >&2
echo "this is normal"
在用sh tempRe.sh执行时,输出
is is an error
this is normal
但是,如果我们在执行脚本时,将错误重定向到另一个文件里面:
sh tempRe.sh 2>test
会发现,输出只有
this is normal.
而this is error的错误被重定向到了test文件之中。
2.永久重定向
如果脚本中有大量的数据需要重定向,那重定向每个echo语句就会很繁琐。取而代之,可以用exec命令告诉shell脚本在执行期间重定向某个特定文件的描述符。.
比如下面例子:
#!/bin/bash
exec 1>log
exec 2>error.log
echo "this is start of script"
echo "this line is error line" >&2
echo "this is end of script"
~
这里将正常的输入重定向到了 log 中,有问题的输出重定向到了error.log中
在脚本中重定向输入
使用exec 0< textfile,告诉shell它应该从testfile中获取数据而不是重键盘中输入。
<pre name="code" class="html">#!/bin/bash
exec 0<log
count=1
while read line
do
echo "Line $count:$line"
count=$[ $count+1 ]
done
阻止命令的输出
将所有的输出重定向到 /dev/null 文件中。
ls -al > /dev/null
同时,/dev/null可以快速一处某个文件内所有的内容
cat /dev/null > textfile
记录消息:
有时候需要将输出一部分输出到显示器,一部分发送到日志。此时可以直接用tee命令。
[root@localhost Redirect]# vim inputRe.sh
[root@localhost Redirect]# date | tee datefile
2015年 05月 25日 星期一 01:03:23 PDT
[root@localhost Redirect]# cat datefile
2015年 05月 25日 星期一 01:03:23 PDT
默认情况下,tee会覆盖文件里面的内容,如果需要追加内容,则需要加上在tee 后加上-a