Bash:$?应为0时返回1
我有一个bash脚本Bash:$?应为0时返回1,bash,Bash,我有一个bash脚本 klist | grep DHCPTEST.COM > /dev/null 我知道klist将返回DHCPTEST.COM中的行,所以我知道grep应该返回true(0),并且当脚本从命令提示符$运行时?确实返回0 但是,当从C程序(DHCPD)调用脚本时,该行返回False(即$?设置为1)-为什么?为避免任何混淆,请将其拼写出来: grep -q DHCPTEST.COM <(klist) grep-q DHCPTEST.COM从C调用时,您如何确定结果
klist | grep DHCPTEST.COM > /dev/null
我知道klist将返回DHCPTEST.COM中的行,所以我知道grep应该返回true(0),并且当脚本从命令提示符$运行时?确实返回0
但是,当从C程序(DHCPD)调用脚本时,该行返回False(即$?设置为1)-为什么?为避免任何混淆,请将其拼写出来:
grep -q DHCPTEST.COM <(klist)
grep-q DHCPTEST.COM从C调用时,您如何确定结果?那是系统吗<代码>执行代码
<代码>执行VPE?您指定的是bash
,还是可以使用/bin/sh
?您如何知道该行返回的内容?如果您可以不遗余力,请共享您使用的代码并运行该命令。我怀疑执行可能甚至不会成功,产生了一个错误,好像没有匹配。我尝试了bash shell和sh shell(调用脚本的代码使用exec命令,似乎使用了Bourne shell)。作为美元?是从最后执行的命令返回的,我希望它是从grep命令返回的,正如我所说的,当从命令行执行脚本时,从该行返回一个0值;只有当从C程序调用scrip时,返回值才会发生变化。我确信POSIX在这里有话要说,但不能说“作为$?从上次执行的命令返回`这意味着它将返回grep
exitcode:管道的参与进程并行运行,即同时运行。我相信POSIX会要求对$?使用某种逻辑,但正如我所说的,这并不明显,我必须自己查找。我尝试了您的方法,并使用$?在从命令行执行脚本时仍然设置为0,在从DHCPD调用时仍然设置为1。在这种情况下,我怀疑区域设置存在差异(不同的排序顺序导致不同的比较结果)。您可以检查LANG
环境变量的值吗(PS。这实际上假设您可能正在搜索比DHCPTEST.COM
稍微简单一点的东西,但无论如何,值得检查一下)LANG的结果是en_GB.utf8。