据我所知,在命令后使用&
是在后台运行它。 html
&
用法示例: tar -czf file.tar.gz dirname &
linux
可是&&
呢? (请看如下示例: https : //serverfault.com/questions/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188 ) shell
“ &&”的一个很常见的用法是使用自动工具编译软件。 例如: 编程
./configure --prefix=/usr && make && sudo make install
基本上,若是配置成功,则运行make进行编译,若是成功,则以root用户运行make来安装程序。 当我最肯定一切都会正常工做时,我会使用它,它使我可以作其余重要的事情,例如查看stackoverflow而不是“监视”进度。 c#
有时候我真的被带走了... centos
tar xf package.tar.gz && ( cd package; ./configure && make && sudo make install ) && rm package -rf
例如,从头开始制做linux时,我会这样作。 编程语言
命令行-
&&
的目的是什么?
在外壳中,当您看到 工具
$ command one && command two
目的是仅在第一个命令成功时才执行&&
的命令。 这是Posix shell的惯用用法,不只在Bash中发现。 编码
若是第一个进程失败,它旨在阻止第二个进程的运行。 spa
程序在退出时返回一个信号 。 若是成功退出,则应返回0;不然,请返回大于零。 这容许进程之间的通讯量有限。
&&
在posix shell语法中称为AND_IF
,它是and_or
命令列表的一部分,该命令还包括||
这是具备类似语义的OR_IF
。
语法符号,从文档中引用:
%token AND_IF OR_IF DSEMI /* '&&' '||' ';;' */
语法(也从文档中引用)代表能够将任意数量的AND_IF
( &&
)和/或OR_IF
(( ||
)串在一块儿(由于and_or
递归定义):
and_or : pipeline | and_or AND_IF linebreak pipeline | and_or OR_IF linebreak pipeline
两个运算符具备相同的优先级,而且从左到右进行评估(它们是左关联的)。 正如文档所说:
AND-OR
列表是由运算符"&&"
和"||"
分隔的一个或多个管道的序列 。列表是一个或多个AND-OR列表的序列,由运算符
';'
分隔 和'&'
并可选地以';'
结尾 ,'&'
或。运算符
"&&"
和"||"
应当具备相同的优先级,并应以左联想性进行评估。 例如,如下两个命令仅将bar写入标准输出:$ false && echo foo || echo bar $ true || echo foo && echo bar
在第一种状况下,false是状态为1
的命令
$ false $ echo $? 1
这意味着echo foo
不运行 (即,将echo foo
短路)。 而后执行命令echo bar
。
在第二种状况下,true退出,代码为0
$ true $ echo $? 0
所以,不执行echo foo
,而后执行echo bar
。
command_1 && command_2
:仅在成功执行command_1时执行command_2。
command_1 || command_2
command_1 || command_2
:仅当未成功执行command_1时才执行command_2。
感受相似于在主流编程语言中执行“ if”条件的方式,例如if (condition_1 && condition_2){...}
若是condition_1为false
以及if (condition_1 || condition_2){...}
若是condition_1为true
则将忽略condition_2。 瞧,这与您编码时使用的技巧相同:)
&&
让您根据上一个命令是否成功完成执行某些操做-这就是为何您倾向于将其连接为do_something && do_something_else_that_depended_on_something
。
若是第一条语句成功结束,则执行第二条语句。 就像if语句:
if (1 == 1 && 2 == 2) echo "test;"
它首先尝试1 == 1,若是是,则检查2 == 2