理解shell脚本中的2>&1

问题描述:

    最近在写crontab的时候,看到一条0 10 sh /abc/f.sh > /abc/log 2>&1大体长成这样的一条定时任务。不知道最后面的2>&1是起什么做用的,而后就去学习了一下。segmentfault

问题分析:

    1.首先咱们看前面的0 10 sh /abc/f.sh > /abc/log,这个比较好理解,意思是天天的10点整去执行f.sh脚本,而且将标准输出重定向到log文件中
    2.咱们再来看后面的2>&1, 而后咱们还得知道一个概念,文件描述符,能够参考下,wiki对文件描述符的简绍文件描述符的原理连接。简单的来讲就是有一个整数,它的枚举值是0(标准输入),1(标准输出),2(标准错误),而后0是从键盘输入,1和2都是输出到屏幕上。
    3.咱们了解了整数的含义以后再来看就比较好理解了,对于重定向符号">",咱们能够这么理解: 文件描述符 > 文件.好比 ls > a.txt,就是说把ls的输出存入a.txt, >等于 1 >, 因此写成ls 1> a.txt也是同样的效果.若是>后面是&1就是用来表示这是文件描述符.
    4.0 10 sh /abc/f.sh > /abc/log 2>&1因此这个命令就是说把执行结果的标准输出放入到log文件,又由于2>&1(标准错误也重定向到标准输入,以前标准输入已经重定向到了log),所以这个命令的正确执行和报错都会放入到log文件中。学习

实例:

咱们能够看下面的两个例子:图片描述
1.首先由f,log两个文件,ll f1 > log 2 >&1,意思是标准输出和错误都输出到log中,因此cat log中有错误信息。
图片描述
2.再看第二个,首先由f,log两个文件,ll f2 > log >&2,意思是标准输出重定向到log中,标准输出又重定向到标准错误中,由于标准错误是输出到屏幕的,因此无论ll f2是存在仍是不存在都会在屏幕上显示出来。spa

相关文章
相关标签/搜索