shell命令中“ &&”的目的是什么?

据我所知,在命令后使用&是在后台运行它。 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-215188shell


#1楼

“ &&”的一个很常见的用法是使用自动工具编译软件。 例如: 编程

./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时,我会这样作。 编程语言


#2楼

命令行- &&的目的是什么?

在外壳中,当您看到 工具

$ command one && command two

目的是仅在第一个命令成功时才执行&&的命令。 这是Posix shell的惯用用法,不只在Bash中发现。 编码

若是第一个进程失败,它旨在阻止第二个进程的运行。 spa

进程返回0表示true,其余正数表示false

程序在退出时返回一个信号 。 若是成功退出,则应返回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
  1. 在第一种状况下,false是状态为1的命令

    $ false $ echo $? 1

    这意味着echo foo不运行 (即,将echo foo短路)。 而后执行命令echo bar

  2. 在第二种状况下,true退出,代码为0

    $ true $ echo $? 0

    所以,不执行echo foo ,而后执行echo bar


#3楼

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。 瞧,这与您编码时使用的技巧相同:)


#4楼

&&让您根据上一个命令是否成功完成执行某些操做-这就是为何您倾向于将其连接为do_something && do_something_else_that_depended_on_something


#5楼

若是第一条语句成功结束,则执行第二条语句。 就像if语句:

if (1 == 1 && 2 == 2)
  echo "test;"

它首先尝试1 == 1,若是是,则检查2 == 2

相关文章
相关标签/搜索