Linux终端同一行执行双命令问题:为何./build.py || cd /ns-3.20仅首个命令生效?
问题原因与解决办法
哦,这个坑我之前踩过,咱们把问题拆开来聊清楚:
1. ||的逻辑不符合你的预期
你用的command1 || command2是逻辑或的执行规则:
只有当
command1执行失败(返回值非0)时,才会触发执行command2
你提到build.py运行成功了,那它的返回值是0,所以后面的cd /ns-3.20根本不会被触发,这是核心问题所在。
2. 根据真实需求选对命令分隔符
你得先明确自己的实际需求,再对应选择合适的命令分隔方式:
- 如果想不管
build.py成功还是失败,都切换到目标目录:用分号;分隔,它会按顺序执行所有命令,不受前一个命令结果影响:./build.py ; cd /ns-3.20 - 如果想只有
build.py成功执行后,才切换目录:用&&(逻辑与),它会在前一个命令执行成功时,才运行下一个命令:./build.py && cd /ns-3.20 - 如果确实是想**
build.py失败时才切换目录**:那你当前的命令逻辑是对的,但得确保build.py真的执行失败(比如故意输错脚本名./build_fake.py || cd /ns-3.20),这时候才会触发cd操作。
额外小提醒
如果你是把这些命令写到shell脚本里,那cd只会改变脚本所在子shell的工作目录,不会影响你当前的终端会话——不过你是直接在终端输入命令的,所以这个问题对你来说不存在。
内容的提问来源于stack exchange,提问作者user9283041
相关产品推荐
相关产品推荐

