Shell 脚本专家指南 学习笔记2 数据重定向

71 篇文章 0 订阅

cron 任务:

10 5 * * * /run/some/script > /dev/null 2 > &1

在这个例子中,所有的输出都会被发送到/dev/null中,无论是脚本本身产生的标准输出,还是Shell或者脚本命令产生的错误输出。

10 5 * * * /run/some/script 2 > &1 > /dev/null
注意,这个例子中 ,并不能达到禁止所有输出的目的。任务的stderr 输出继续会通过电子邮件发送给用户。

10 5 * * * /run/some/script > /dev/null
它将去掉所有正常输出(即到stdout的输出),但是它不会重定向脚本产生的错误输出。实际上,这也许是最安全的句法,它转移了交互运行脚本的所有正常输出,但是当发生错误时,仍然会有输出警告用户。


  • expression < file 将文件file的内容重定向给表达式。
  • expression > file 将表达式的输出定向到指定文件file中,若file不存在,则会新创建,若file存在,则会覆盖掉原文件。
  • expression >> file 将表达式的输出定向追加到指定文件file中,不会向上面expression > file一样覆盖掉原文件。
  • expression 2 > /dev/null > file 将表达式的错误输出重定向到/dev/null中,同时将标准输出stdout重定向到指定文件file中。
  • expression  > /dev/null 2 > file 将表达式的标准输出stdout重定向到/dev/null中,同时将标准错误输出stderr重定向到指定文件file中,与上个句法相反。
  • expression > file 2 > &1 将表达式的标准输出stdout和标准错误输出stderr都重定向到指定文件file中。
  • expression &> file  将表达式的标准输出stdout和标准错误输出stderr都重定向到指定文件file中,是上个句法的简写版本。
  • expression 2 > file 将表达式的标准错误输出stderr重定向到指定文件file中,例如
find /home -type -f -exec grep -l "some_string" {} \; 2 > /dev/null
这个例子会输出find命令找到的所有包含字符串"some_string“的文件名字,但是把任意”Permission Denied"错误重定向到/dev/null中。

文件代码:0,1,2,... <标准输入 > 标准输出 标准错误

系统默认指定这3个文件代码,这3个文件代码在建立Shell环境时就已经开启,往后如果需要开启新文件,则分配3以上的文件代码

转向语义大部分不能单独使用,必须和Bash命令一起运用

 

操作文件:

fd<>文件 fd文件代码,可供读写

fd<&- 关闭输入文件

fd>&- 关闭输出文件

有时,操作系统已开启的文件代码(0 1 2),为了不影响原有文件代码的作用,最好先复制一份,等操作结束,再还原回去,这样的概念,称为复制代码”。

n<&m 复制转向输入的文件代码m,存成文件代码n,使n连接至m

n>&m 复制转向输出的文件代码m,存成文件代码n,使n连接至m

用例1:

exec >&6

同于exec 1 >&6,将标准输出连接到文件代码6,因此,凡是原本出现在标准输出的内容,会转存至文件代码6.。

 

用例2:

exec <&6

同于exec 0<&6,将文件代码6的内容,转向至标准输入,而由cat把内容显示出来.。

 

用例3:

exec 5<&0

复制标准输入(0),存在文件代码5,即建立文件代码0的连接。简单来说,就是做标准输入的备份。

一旦备份好标准输入后,就可以对标准输入进行操作,如转向输入。操作完毕,接下来应该还原标准输入,方法如下:

exec 0<&5 5<&-

将存储在文件代码5的标准输入还原,并关闭文件代码5,这样,原标准输入的功能就不会受到影响。

也可以 分两行写:

exec 0<&5

exec 5<&-

 

转向的用法:

转向输入 fd<文件

转向输出 fd>文件 set -o noclobber set -C 不覆盖 fd>|文件 强制覆盖

转向附加 fd>>文件

标准错误伴随标准输出做转向&>文件 或 >&文件

实际上,&>的作用,和以下写法相同:

>文件2>&1

即:转向输出至“文件”,标准错误代码2连接至标准输出1,其效用也等于

 

Here Document转向

fd<<标记

资料

...

...

标记

例子

 

#!/bin/bash

exec 6<<EOF
line1
line2
line3
EOF

while read <&6
do
echo$REPLY
done

结果

 











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值