Linux中单行上的多个命令

EDP*_*EDP 4 linux command-line

我想在命令行上运行几个命令.

在通常情况下,这很简单:

#cd /home && ls && echo "OK"
root   web   support
OK
Run Code Online (Sandbox Code Playgroud)

但是,当其中一个命令结束时,&这似乎不起作用:

#killall vsftpd && /usr/sbin/vsftpd & && echo "OK"
-sh: syntax error: unexpected "&&"
OK
Run Code Online (Sandbox Code Playgroud)

我试过没有单尾,&但这显然会阻止后者的处理echo.只是为了好玩尝试了三倍,&但这也返回错误.

所以我的问题; 我怎样才能得到

killall vsftpd
/usr/sbin/vsftpd &
echo "OK"
Run Code Online (Sandbox Code Playgroud)

在一条线上执行?

hek*_*mgl 6

首先,如果要在一行中运行多个命令,请将它们分开;:

cmd1 ; cmd2 ; cmd3
Run Code Online (Sandbox Code Playgroud)

这&&是逻辑和运营商.如果你发行

cmd1 && cmd2
Run Code Online (Sandbox Code Playgroud)

cmd2只有cmd1成功才会运行.这一点很重要(见下文).


如果您使用&在后台运行命令,只需附加没有;分隔符的下一个命令:

cmd1 & cmd2
Run Code Online (Sandbox Code Playgroud)

该&不是在这种情况下,一个逻辑运算符,它告诉Bash运行cmd1在后台.

在您的情况下,命令行在语法上需要如下所示:

killall vsftpd && /usr/sbin/vsftpd & echo "OK"
Run Code Online (Sandbox Code Playgroud)

但是,我猜你真的是这个意思:

killall vsftpd ; /usr/sbin/vsftpd & echo "OK"
Run Code Online (Sandbox Code Playgroud)

因为否则你将无法启动该进程(如果它尚未运行),因为killall将返回非零返回代码.

即使这样,代码也非常脆弱.我建议使用您的操作系统工具启动vsftp作为守护进程.我的意思是命令等设施start-stop-daemon.