Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:$?应为0时返回1_Bash - Fatal编程技术网

Bash:$?应为0时返回1

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调用时,您如何确定结果

我有一个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调用时,您如何确定结果?那是系统吗<代码>执行代码
<代码>执行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。