在 Unix Like 环境下用 crontab 排程执行指令或 Shell Script 时, 很多时最后都会加上 “> /dev/null 2>&1”, 例如:
* * * * * /path/to/my-script.sh > /dev/null 2>&1
以下是对 “> /dev/null 2>&1” 分拆的解释:
>: 是重新导向, 例如将指令的执行结果写入到档案, 而以上的例子是将 /path/to/my-script.sh 的执行结果重新导向到 /dev/null.
/dev/null: /dev/null 在 Unix 或 Linux 就像黑洞, 会将任何导入的东西吃掉, 简单来说就是程式会照常执行, 但不会输出任何执行结果.
2: 系统将标准输入/输出分成三个, 分别是 stdin (fd 是 0), stdout (fd 是 1), 及 stderr (fd 是 2), 在这里 2 代表标准错误输出 stderr.
>: 重新导向.
&: 设定使用 fd 代号, 如果 “> dev/null 2>&1” 没有加上 “&”, 会视后面的 “1” 为档案名称, 而不是 fd.
1: fd 的标准输出 stdout.
简单来说, “> /dev/null 2>&1” 的意思, 是将左边程式的所有标准输出 stdout, 及标准错误输出 stderr 导向到 /dev/null, 即左边的程式只会执行, 而不会输出任何程式执行的结果。
想问那 2>&1 的意思是“把stderr 输出到stdout“的意思吗?
按照你的结论,我只要./script.sh > /dev/null 就会让左边程式执行,且不输出结果。
为什么还要加上 2>&1 呢?
thanks
如果在执行指令时有出现错误,这时候你就会知道为什么要加上 2>&1 了,加了它也就会把错误输出给导到/dev/null 了
结论好像怪怪的? 应该是程式执行正常就不会有结果输出,若程式发生异常会把错误讯息输出至标准输出 stdout?
结论没错 可以自己实验看看, 1绑到null, 再把2绑到1, 所以1,2都会输出到null
你好,这边这阵子有看到 return 0 2> /dev/null 与 return 0 > /dev/null 2>&1 是一样的作用吗?