在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
A.首先了解下1和2在Linux中代表什么 在Linux系统中0 1 2是一个文件描述符
上面表格引用自这里 从上表看的出来,我们平时使用的 echo "hello" > t.log 其实也可以写成 echo "hello" 1> t.log B.关于2>&1的含义 (关于输入/输出重定向本文就不细说了,不懂的可以参考这里,主要是要了解> < << >> <& >& 这6个符号的使用) 1、含义:将标准错误输出重定向到标准输出 2、符号>&是一个整体,不可分开,分开后就不是上述含义了。 3、写成2&>1也是不可以的 C.为什么2>&1要放在后面 考虑如下一条shell命令 nohup java -jar app.jar >log 2>&1 & (最后一个&表示把条命令放到后台执行,不是本文重点,不懂的可以自行Google) 为什么2>&1一定要写到>log后面,才表示标准错误输出和标准输出都定向到log中? 我们不妨把1和2都理解是一个指针,然后来看上面的语句就是这样的:
再来分析下 nohup java -jar app.jar 2>&1 >log &
所以这就不是我们想要的结果。 简单做个试验测试下上面的想法: java代码如下: public class Htest { public static void main(String[] args) { System.out.println("out1"); System.err.println("error1"); } } javac编译后运行下面指令: java Htest 2>&1 > log 你会在终端上看到只输出了"error1",log文件中则只有"out1" D.每次都写">log 2>&1"太麻烦,能简写吗? 有以下两种简写方式 &>log >&log 比如上面小节中的写法就可以简写为: nohup java -jar app.jar &>log & 上面两种方式都和">log 2>&1"一个语义。 那么 上面两种方式中&>和>&有区别吗? 语义上是没有任何区别的,但是第一中方式是最佳选择,一般使用第一种 参考: https://unix.stackexchange.com/questions/89386/what-is-symbol-and-in-unix-linux https://superuser.com/questions/335396/what-is-the-difference-between-and-in-bash 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持极客世界。 |
请发表评论