一、前景
调用shell中脚本到后台运行,会将运行日志文件写入一个带.log文件中,.log后面常常加入 2>&1,最后**&**表示把这条命令放到后台执行。
nohup sh /root/model_name/script/black_table_stat.sh > /root/model_name/log/black_table_stat_1_$(date +"%Y%m%d%H").log 2>&1 &
二、了解 0、1、2 在linux中含义
名称 | 代码 | 操作符 |
---|---|---|
标准输入 | 0 | < 或 << |
标准输出 | 1 | >,>>,1>或1>> |
标准错误输出 | 2 | 2>或2>> |
举例说明:
当前目录存在test.txt 文件,不存在b.txt文件。
[wqf@b1i10 ~]$ ls test.txt
test.txt
[wqf@b1i10 ~]$ ls b.txt
ls: cannot access b.txt: No such file or directory
把正常内容输出到文件file.out,错误内容输出到文件file.err。
[wqf@b1i10 ~]$ ls test.txt b.txt 1>file.out 2>file.err
[wqf@b1i10 ~]$ cat file.out
test.txt
[wqf@b1i10 ~]$ cat file.err
ls: cannot access b.txt: No such file or directory
三、各种重定向的含义
1、2>&1的含义
含义:将标准错误输出重定向到标准输出
符号>&是一个重定向符号,表示将标准错误输出加入到标准输出 。
可以理解:
1、本来1(标准输出)输出到屏幕
2、执行>log,将1(标准输出)输出到log文件
3、执行2>&1,将2(标准错误输出)加入到1(标准输出),因为1(标准输出)输出到log文件,因此2(标准错误输出)也指向了log。
例如:
nohup sh /root/model_name/script/black_table_stat.sh > /root/model_name/log/black_table_stat.log 2>&1 &
查看black_table_stat.log会发现里面既有正常输出内容又有错误输出内容。
2、&>file 的含义
将1(标准输出)和2(标准错误输出)都重定向到文件file中,与**>log 2>&1**的含义一样。
例如:
nohup sh /root/model_name/script/black_table_stat.sh > /root/model_name/log/black_table_stat_1_$(date +"%Y%m%d%H").log 2>&1 &
## 可以简写为以下:
nohup sh /root/model_name/script/black_table_stat.sh &> /root/model_name/log/black_table_stat_1_$(date +"%Y%m%d%H").log &
语义上是没有任何区别的,一般使用第一种一般用第一种“>log 2>&1”
3、1>&2 的含义
含义:将标准输出重定向到标准错误输出
符号>&是一个重定向符号,表示将标准错误输出加入到标准输出 。
可以理解为:
1、本来1(标准输出)输出到屏幕。
2、执行>log,将1(标准输出)输出到log文件。
3、执行1>&2,将1(标准输出)加入到2(标准错误输出),因为2(标准错误输出)还是指向屏幕。
我们在终端敲命令错误屏幕就会报错,可以将屏幕报错显示的地方当成标准错误输出通道2。
例如:
[wqf@b1i10 ~]$ sh /apps/summary_fz_province/test.sh > /apps/summary_fz_province/test.log 1>&2
$*=
$@=
print each param from
print each param from
运行结果,查看test.log里面什么都没有,屏幕会输出运行test.sh的正常内容。
4、 /dev/null 的含义
/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。
如果希望屏蔽 标准输出 和 标准错误输出,可以这样写:
command > /dev/null 2>&1
可以理解为:
1、本来1(标准输出)输出到屏幕
2、执行> /dev/null,将1(标准输出)输出到/dev/null文件
3、执行2>&1,将2(标准错误输出)加入到1(标准输出),因为1(标准输出)输出到/dev/null文件,因此2(标准错误输出)也指向了/dev/null。