今天在写java启动脚本的时候遇到nohup后面有2>&1,不是很明白,研究了一下以后有了一定的理解。
1、首先应当知道linux中有一种标准输入加两种输出,分别是STDIN,STDOUT,STDERR,对应的数字是0,1,2。
2、STDIN就是标准输入,默认从键盘读取信息;STDOUT是标准输出,默认将输出结果输出至终端,也就是显示器之类的东西。
3、STDERR是标准的错误信息,默认也会显示在终端上。
4、由于STDOUT与STDERR都会默认显示在终端上,为了区分二者的信息,就有了编号的0,1,2的定义,用1表示STDOUT,2表示STDERR。
举个例子:who 1>find.out 2>find.err
who 2>find.err >find.out
who 2>find.err 1>find.out
who的命令的执行结果输出正确的输出(STDOUT)被1接收,错误的信息(STDERR)被2接收。
5、若要将所有的输出及错误信息都显示出来,可以用&表示全部1和2的信息,例如:
who &>find.all
6、有时候希望将错误的信息重新定向到输出,就是将2的结果重定向至1中就有了"2>1"这样的思路,如果按照上面的写法,系统会默认将错误的信息(STDERR)2重定向到一个名字为1的文件中,而非所想的(STDOUT)中。因此需要加&进行区分。就有了 2>&1 这样的用法。
举例:
who 2>&1 |less7、有时候还能看到这样的用法:
who &2>&1 |less
这里可以分解成
who & 表示前面的命令放到后台执行。
2>&1 |less 表示将错误信息重定向至标准输出,并用less进行分页显示