&、&&、| 和 || 区别
command1 & command2 & command3 # 三个命令同时执行;
注:一个 & 命令放在bash行尾:其作用是令该命令转到后台执行。对于这样的命令,系统会创建一个 sub-shell 来运行这个命令。同时,在执行改行命令的 shell 环境中,这个命令会立刻返回 0 并且继续下面的 shell 命令的执行。除此之外,在执行这个命令之后,terminal 上会输出创建的 sub-shell 的线程 ID(PID)。
通过&分支出去的 sub-shell 的 PID 被存储在一个特殊的变量$!中,
$ echo $!
77923
链接:https://www.jianshu.com/p/410cd35e642f
command1 && command2 #只有前面命令执行成功,后面命令才继续执行
&& 左边的命令(命令 1)返回真(即返回 0,成功被执行)后,&& 右边的命令(命令 2)才能够被执行;换句话说,“如果这个命令执行成功 && 那么执行这个命令”
管道符号,是 unix 一个很强大的功能,符号为一条竖线:“|”。
command 1 | command 2
他的功能是把第一个命令 command 1 执行的结果作为 command2 的输入传给 command 2
command1 || command2
|| 则与 && 相反。如果||左边的命令(command1)未执行成功,那么就执行||右边的命令(command2);或者换句话说,“如果这个命令执行失败了 || 那么就执行这个命令”。
如果不添加任何逻辑符号,脚本中的命令将会按照行的顺序进行执行,当第一行命令 comman1 执行完后,然后才会启动第二行执行命令 command2 。如果命令 command2 的执行需要用到 comman1的执行结果时,请采用这种方法。
例如:
command1
command2
————————————————
原文链接:https://blog.csdn.net/u012069313/article/details/124697566
在命令的末尾加个&符号后,程序可以在后台运行,但是一旦当前终端关闭(即退出当前帐户),该程序就会停止运行。想要退出当前终端,但又想让程序在后台运行,该如何处理:在这种情况下,我们就可以使用nohup命令。。
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下(如果不将 nohup 命令的输出重定向),如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
语法
nohup Command [ Arg … ] [ & ]
参数说明:
Command:要执行的命令。
Arg:一些参数,可以指定输出文件。
&:让命令在后台执行,终端退出后命令仍旧执行。
如果要停止运行,你需要使用以下命令查找到 nohup 运行脚本到 PID,然后使用 kill 命令来删除:
ps -aux | grep "runoob.sh"
kill -9 进程号PID
nohup命令提交作业时,指定输出文件:
nohup command > myout.file 2>&1 &
2>&1解释:
0 – stdin (standard input,标准输入)
1 – stdout (standard output,标准输出)
2 – stderr (standard error,标准错误输出)
如:./startup.sh 2>&1 | tee startup.log
bash wait 命令是一个 Shell 命令,它等待后台运行的进程完成并返回退出状态。与等待指定时间的sleep 命令不同,该wait命令等待所有或特定后台任务完成。
命令 | 解释 |
---|---|
wait | 如果没有任何参数,该wait命令会等待所有后台进程完成,然后再继续执行脚本。 |
wait pid | 添加的 PID 或作业 ID 会等待特定进程结束,然后再继续执行脚本。 |
wait -n | 仅等待以下后台进程完成并返回退出状态。 |
wait -f | 终止程序首先等待后台任务完成后再退出。 |
wait [作业指示或进程号]
语法
wait(参数) 使用 wait 是在等待上一批或上一个脚本执行完(即上一个的进程终止),再执行wait之后的命令。
cmd1 & cmd2 & wait
wait放最后,cmd1和cmd2后台同时运行,然后等待他们结束。
(cmd1; echo "cmd1 output" >&3)& pid1=$!
(cmd2; echo "cmd2 output" >&3)& pid2=$!
(cmd3; echo "cmd3 output" >&3)& pid3=$!
wait $pid1 $pid2 $pid3
exec 3>&
cat <&3
这个命令也会让 command1、command2 和 command3 三个命令在后台同时运行,然后等待它们的结束。在每个子进程的命令后面,我们使用 echo 命令来输出它们的输出,并将它们重定向到文件描述符3。在 wait 命令后面,我们指定了三个进程号,表示要等待这三个进程的结束。最后,我们使用 cat 命令来读取文件描述符3的内容,并输出它们的输出