Bash 中 test 命令中的 '&&' 与 '&'
- 2024-10-21 09:14:00
- admin 原创
- 89
问题描述:
考虑:
gndlp@ubuntu:~$ test -x examples.desktop && echo $?
gndlp@ubuntu:~$ test -x examples.desktop & echo $?
[1] 2992
0
为什么 Bash 在这种情况下会采取这样的行为?
测试命令是否只是没有完成,因此echo
没有被处理?
解决方案 1:
&&
和的含义&
本质上是不同的。
Bash 中是什么
&&
?在 Bash 以及许多其他编程语言中,&&
表示“AND”。在这样的命令执行上下文中,它表示左侧和右侧的项目&&
应按顺序运行。Bash 中有什么
&
?单个&
意味着前面的命令(紧靠左边的命令&
)应该在后台运行。
看一下你的例子:
gndlp@ubuntu:~$ test -x examples.desktop && echo $?
gndlp@ubuntu:~$ test -x examples.desktop & echo $?
[1] 2992
0
第一个命令(按照其结构)实际上不返回任何内容。但第二个命令返回一个,[1] 2992
其中2992
表示在后台运行的进程 ID (PID), 是0
第一个命令的输出。
由于第二条命令只是test -x examples.desktop
在后台运行,所以它运行得非常快,因此进程 ID 会立即产生并消失。
解决方案 2:
&
在后台执行命令,无论其状态如何都会返回 0。
来自手册页:
如果命令以控制操作符 & 结束,则 shell 会在子 shell 中在后台执行该命令。shell 不会等待命令完成,返回状态为 0。以 ; 分隔的命令按顺序执行;shell 会依次等待每个命令终止。返回状态是最后执行的命令的退出状态。
解决方案 3:
看看你的命令是什么:
test -x examples.desktop && echo $?
这意味着检查是否examples.desktop
可执行,如果可执行,则执行echo $?
。
test -x examples.desktop & echo $?
意思是检查是否examples.desktop
可以在“后台”执行,然后执行echo $?
。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD