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

相關文章
相關標籤/搜索