Cap*_*ain 333 syntax bash shell command-line
据我所知,&
在命令之后使用是为了在后台运行它.
&
用法示例:tar -czf file.tar.gz dirname &
但是怎么样&&
?(看看这个例子:https://serverfault.com/questions/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188)
gir*_*uid 379
&&
让你根据上一个命令是否成功完成做一些事情 - 这就是你倾向于把它看作链接的原因do_something && do_something_else_that_depended_on_something
.
plu*_*dra 364
此外,你还有||
一个逻辑或者,;
它也只是一个不关心命令发生的事情的分隔符.
$ false || echo "Oops, fail"
Oops, fail
$ true || echo "Will not be printed"
$
$ true && echo "Things went well"
Things went well
$ false && echo "Will not be printed"
$
$ false ; echo "This will always run"
This will always run
Run Code Online (Sandbox Code Playgroud)
有关此内容的一些详细信息,请参阅Bash手册中的命令列表.
Aar*_*all 98
命令行 - 目的是
&&
什么?
在shell中,当你看到
$ command one && command two
Run Code Online (Sandbox Code Playgroud)
目的是执行&&
仅在第一个命令成功时执行的命令.这是Posix shell的惯用语,不仅仅是在Bash中找到的.
如果第一个进程失败,它打算阻止第二个进程的运行.
程序在退出时返回信号.如果它们成功退出,它们应返回0,否则返回大于零.这允许进程之间的有限量的通信.
将&&
被称为AND_IF
在POSIX壳语法,这是一个的一部分and_or
列表的命令,其中还包括||
其为OR_IF
具有相似的语义.
语法符号:
Run Code Online (Sandbox Code Playgroud)%token AND_IF OR_IF DSEMI /* '&&' '||' ';;' */
语法:
Run Code Online (Sandbox Code Playgroud)and_or : pipeline | and_or AND_IF linebreak pipeline | and_or OR_IF linebreak pipeline
两个运算符具有相同的优先级,并从左到右进行求值(它们是左关联的)例如,以下内容:
Run Code Online (Sandbox Code Playgroud)$ false && echo foo || echo bar $ true || echo foo && echo bar
两者都是回声AND_IF
.
在第一种情况下,false是以状态退出的命令 &&
$ false
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)
这意味着OR_IF
不运行(即短路||
).然后and_or
执行该命令.
在第二种情况下,真正的退出代码为 AND-OR
$ true
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
因此"&&"
不执行,然后"||"
执行.
Nig*_*son 31
'&&'的一个常见用法是使用autotools编译软件.例如:
./configure --prefix=/usr && make && sudo make install
Run Code Online (Sandbox Code Playgroud)
基本上,如果配置成功,则运行make以进行编译,如果成功,则以root身份运行make以安装程序.当我确信事情会起作用时,我会使用它,它允许我做其他重要的事情,比如看看stackoverflow而不是'监视'进度.
有时我真的被带走了......
tar xf package.tar.gz && ( cd package; ./configure && make && sudo make install ) && rm package -rf
Run Code Online (Sandbox Code Playgroud)
我这样做的时候,例如从头开始制作一个Linux框.
看例子:
mkdir test && echo "Something" > test/file
Run Code Online (Sandbox Code Playgroud)
Shell将尝试创建目录test
,然后,只有在成功的情况下才会尝试在其中创建文件.
因此,如果其中一个步骤失败,您可能会中断一系列步骤.
command_1 && command_2
:只有在command_1执行成功时才执行command_2.
command_1 || command_2
:仅在command_1未成功执行时执行command_2.
感觉类似于在主流编程语言中执行'if'条件的情况,如if (condition_1 && condition_2){...}
条件_2,如果condition_1是false
,则将省略,如果condition_1是,if (condition_1 || condition_2){...}
则将省略condition_2 true
.看,这与你用于编码的技巧相同:)
如果第一个语句成功结束,则执行第二个语句.像if语句:
if (1 == 1 && 2 == 2)
echo "test;"
Run Code Online (Sandbox Code Playgroud)
如果1 == 1则首次尝试,如果为真则检查2 == 2
归档时间: |
|
查看次数: |
344159 次 |
最近记录: |