據我所知,在命令後使用&
是在後臺運行它。 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