【shell】—如何理解调用shell脚本后面加上”2>&1“及其他重定向字符


一、前景

调用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>>
标准错误输出22>或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。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值