linux数据流重定向

来源:互联网 发布:app数据分析软件 编辑:程序博客网 时间:2024/05/01 06:43

2.3  & 后台执行命令

 

       当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行。

 

       如:

       30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh &

 

       在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。

       不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:

       如:

              command >out.file 2>&1 &

 

       在这个例子中,2>&1表示所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。

 

2.4  2>&1 含义

 

先看一个例子:

0 2 * * * /u01/test.sh >/dev/null 2>&1 &

 

这句话的意思就是在后台执行这条命令,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null 文件,也就是清空。

 

在这里有有几个数字的意思:

       0表示键盘输入 ,即标准输入

       1表示标准输出

       2表示标准错误输出.

 1> 以覆盖的方法将正确的数据输出到指定的文件或设备上,1>后面接文件或设备

1>>以累加的方法将正确的数据输出到指定的文件或设备上, 1>>后面接文件或设备

2>以覆盖的方法将错误的数据输出到指定的文件或设备上,2>后面接文件或设备

2>>以累加的方法将错误的数据输出到指定的文件或设备上,2>>后面接文件或设备

 

我们也可以这样写:

0 2 * * * /u01/test.sh  >/u01/out.file &  --这里没写,默认是1,等于    0 2 * * * /u01/test.sh  1>/u01/out.file &

0 2 * * * /u01/test.sh  1>/u01/out.file &

0 2 * * * /u01/test.sh  2>/u01/out.file &

0 2 * * * /u01/test.sh  1>/u01/out.file  2>&1 &

 

将tesh.sh 命令输出重定向到out.file, 即输出内容不打印到屏幕上,而是输出到out.file文件中。

 

2>&1 是将标准错误输出重定向到标准输出。 然后将标准输出重定向到文件out.file。

&1 表示的是文件描述1,表示标准输出,如果这里少了&就成了数字1,就表示重定向到文件1。

 

& :后台执行

 

测试:

ls 2>1 : 不会报没有2文件的错误,但会输出一个空的文件1(因为2>后面接的是文件或设备,所以创建文件1)

ls xxx 2>1: 没有xxx这个文件的错误输出到了1中;

ls xxx 2>&1: 不会生成1这个文件了,不过错误跑到标准输出了;

ls xxx >out.txt 2>&1 == ls xxx 1>out.txt 2>&1;  因为重定向符号>默认是1,这句就把错误输出和标准输出都传到out.txt文件中。

 

 

2.5  2>&1写在后面的原因

       格式:command > file 2>&1   == command  1> file 2>&1

 

       首先是command > file将标准输出重定向到file中, 2>&1 是标准错误输出挷定到标准输出,因为 标准输出已重定向到file,所以标准错误输出同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。

 

如果改成: command 2>&1 >file

       2>&1 标准错误挷定到标准输出,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。

 


原创粉丝点击