问题描述:最近在写crontab的时候,看到一个010sh/abc/f.sh>/abc/log2>&1大致长成了这样一个定时任务。不知道最后的2>&1是干什么的,就去研究了一下。问题分析:1、首先我们看前面的010sh/abc/f.sh>/abc/log,这个很好理解,意思是每隔10点执行f.sh脚本day然后把标准输出重定向到日志文件2.我们再看下面的2>&1,然后我们要知道一个概念,文件描述符,可以参考wiki对文件描述符的简单介绍和链接以文件描述符的原理。简单的说,有一个整数,它的枚举值为0(标准输入)、1(标准输出)、2(标准错误),然后0从键盘输入,1和2输出到屏幕。3、我们理解了整数的含义之后,就更容易理解了。对于重定向符号“>”,我们可以这样理解:文件描述符>文件。比如ls>a.txt,即保存ls输入a.txt的输出,>等于1>,所以写ls1>a.txt也是一样的效果。如果>后面跟着&1,则用来表示这是一个文件描述符。4.010sh/abc/f.sh>/abc/log2>&1所以这个命令的意思是将执行结果的标准输出放到日志文件中,并且因为2>&1(标准错误也被重定向到standardinput,标准输入之前已经被重定向到日志中了),所以这条命令的正确执行和报错都会被放到日志文件中。例子:我们可以看下面两个例子:1、首先有f和log两个文件,llf1>log2>&1,也就是说标准输出和错误都输出到日志,所以有errorcat日志中的消息。2.看第二个。首先有f和log两个文件,llf2>log>&2,意思是标准输出重定向到log,标准输出重定向到标准错误,因为标准错误输出到屏幕,所以无论llf2是否存在,它都会显示在屏幕上。
