gpt4 book ai didi

Bash 总是返回错误代码 eq 0

转载 作者:行者123 更新时间:2023-11-29 09:27:34 26 4
gpt4 key购买 nike

我正在尝试检查文件夹是否是 git 或 svn 存储库的一部分。我使用以下命令获取错误代码并将错误代码存储在变量中。

RSVN=`svn status &> /dev/null; echo $?`
RGIT=`git status &> /dev/null; echo $?`

问题是我总是得到 0 作为错误代码。

我在命令行中尝试,我得到了预期的结果

user@host trunk$ svn status &> /dev/null;
user@host trunk$ echo $?
0
user@host trunk$ git status &> /dev/null;
user@host trunk$ echo $?
128

但是当我运行脚本时,我得到:

+ + svn status

+ echo 0
+ RSVN=0
M buildpackage
+ git status
+
+ echo 0
fatal: Not a git repository (or any parent up to mount point /build)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
+ RGIT=0

这个调用方式是作为下标。它由其他脚本调用。

第一个脚本

#!/bin/sh -x
#set -e

#do stuf

. ../../../tools/second_script.sh

第二个脚本

#!/bin/sh -x
set -e

#do stuf

RSVN=`svn status &> /dev/null; echo $?`
RGIT=`git status &> /dev/null; echo $?`

你知道为什么会这样吗?

最佳答案

在执行命令之前,shell 会替换该变量。改为这样做:

svn status &> /dev/null; RSVN=$?
git status &> /dev/null; RGIT=$?

实际上,改掉使用 ALL_CAPS_VARS 的习惯:有一天你会说 PATH=$(something) 然后想知道为什么你的脚本被破坏了。

关于Bash 总是返回错误代码 eq 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39164968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com