1和2在linux中分别代表什么?在Linux系统中,012是一个文件描述符。从上表可以看出,我们平时使用的echo"hello">t.log也可以写成echo"hello"1>t.log关于2>&1的含义和输入/输出重定向。这里:Shell:pipelineandredirection含义:将标准错误输出重定向到标准输出符号>&是一个整体,不可分割。分开后就没有上面的意思了。例如,有人可能会想:2是标准错误输入,1是标准输出,>是重定向符号,那么“将标准错误输出重定向到标准输出”应该写成“2>1”吗?是这样吗?如果你试过就会知道,2>1的写法其实就是将标准错误输出重定向到一个名为“1”的文件中来写2&>1。为什么2>&1要放在后面考虑下面一条shell命令nohupjava-jarapp.jar>log2>&1&(最后一个&表示后台执行命令,不是本文重点,不明白的可以自己google)为什么2>&1一定要写到>log后面,意思是标准错误输出和标准输出都指向日志?我们不妨把1和2都理解为一个指针,然后这样看上面的语句:本来1----->screen(1指向屏幕)执行完>log,1----->log(1指向log)执行完2>&1,2----->1(2指向1,1指向log,所以2也指向log)``我们分析下nohupjava-jarapp.jar2>&1>log&本来1----->screen(1指向屏幕)执行完2>&1,2----->1(2指向1,1指向屏幕,所以2也指向屏幕)执行>log后,1----->log(1指向log,2仍然指向屏幕)所以这不是我们想要的结果。简单做个实验来验证上面的思路:java代码如下:System.err.println("error1");}}编译完javac后,运行如下命令:javaHtest2>&1>log你会在终端看到只有“error1”输出,而每次“>log2>&1”时日志文件中只写入了“out1”太麻烦了,可以简写吗?有如下两个缩写&>log>&log比如上面这一段的写法可以缩写为:nohupjava-jarapp.jar&>log&以上两个方法的语义都和">log一样2>&1”。那么以上两种方式的&>和>&有区别吗?语义上没有区别,但是第一种方法是最好的选择,一般都使用第一种方法。作者:行走的敏原文:https://blog.csdn.net/zhaomin...
