数据的重定向

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值