详解:nohup ./start.sh> myout.file 2>&1 & ---- 2016-06-02

nohup ./start.sh> myout.file 2>&1 &

上面的命令就是大家常用的,后台执行某个命令文件的命令。但是,./是什么意思,>是什么意思,

2>&1 和 & 又是什么意思你可能并不了解。下面是搜到的相关介绍:

1. nohup与&的区别:

nohup 是后台运行, & 的意思是直接返回shell的界面, 不需要等待你所输入命令结束, 所以这么使用就是(nohup)命令他后台运行, 即使ssh中断也可以运行, (&)让你在输入完这行命令后, 继续出现 '>' 让你输入其他命令

单是&, 相当于不等待直接开始接收下一个命令,你关掉终端会停止运行
nohup command &  后台运行,你关掉终端也会继续运行。

2. ./的意思,与sh的区别:

sh  xxx
用 sh 这个shell  (sh一般指系统默认shell,比如 bash, ksh, Csh 等都有可能) 来解释和运行 xxx 这个脚本。xxx 文件不必具有可执行属性(chmod +x)

./xxx    xxx必须具备可执行属性,如果此时的 xxx 是一个文本文件(脚本),那么按照 xxx 的第一行所指定的命令来解释和执行 xxx, 如果xxx 文件中没有指定,默认按照 /bin/sh 来解释和执行。  xxx 需要在第一行用
#!/path/to/mmm   
的方法来说明要用 mmm 命令来解释和执行 自身。
比如如果是 bash 脚本,为  #!/bin/bash
perl脚本,  #!/usr/bin/perl
python脚本,  #!/usr/bin/python

3. 2>&1的意义:

其实要弄清楚 2>&1 的含义,首先应当知道linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字是0,1,2。STDIN就是标准输入,默认从键盘读取信息;STDOUT是标准输出,默认将输出结果输出至终端,也就是显示器之类的东西;STDERR是标准的错误信息,默认也会显示在终端上。由于STDOUT与STDERR都会默认显示在终端上,为了区分二者的信息,就有了编号的0,1,2的定义,用1表示STDOUT,2表示STDERR。

下面举个例子:以rhce中的例子为例。

(1)、在系统中创建一个普通用户test;

(2)、以普通用户登录,或者以root登录 su -test 切换至普通用户test;

扫描二维码关注公众号,回复: 278833 查看本文章

(3)、执行 find /etc -name passwd 命令,默认会将命令的执行结果(STDOUT)与错误信息(STDERR)都输出至终端显示器。

(4)、体验一下编号1,2的作用,find /etc -name passwd >find.out 2>find.err,这里会将STDOUT与STDERR分别存放至find.out和find.err中,该命令也可以写成下面三种形式,大家可以体会一下编号的意义。

find /etc -name passwd 1>find.out 2>find.err

find /etc -name passwd 2>find.err >find.out

find /etc -name passwd 2>find.err 1>find.out

我个人理解就是find /etc -name passwd的命令的执行结果输出正确的输出(STDOUT)被1接收,错误的信息(STDERR)被2接收。

(5)、若要将所有的输出及错误信息都显示出来,可以用&表示全部1和2的信息,例如:

find /etc -name passwd &>find.all

(6)、有时候希望将错误的信息重新定向到输出,就是将2的结果重定向至1中就有了"2>1"这样的思路,如果按照上面的写法,系统会默认将错误的信息(STDERR)2重定向到一个名字为1的文件中,而非所想的(STDOUT)中。因此需要加&进行区分。就有了 2>&1 这样的用法,举例:

find /etc -name passwd 2>&1 |less

(7)、有时候还能看到这样的用法:

find /etc -name passwd &2>&1 |less

这里可以分解成

find /etc -name passwd &    表示前面的命令放到后台执行。

2>&1 |less    表示将错误信息重定向至标准输出,并用less进行分页显示。

猜你喜欢

转载自simon-9527.iteye.com/blog/2302675