我有一個bash腳本與線
klist | grep DHCPTEST.COM > /dev/null
我知道klist的話,將返回DHCPTEST.COM線,所以我知道grep的應返回true(0)和腳本時從命令提示符$運行?確實返回0.
但是,當從C程序(DHCPD)調用腳本時,該行返回False(即$?設置爲1) - 爲什麼?
我有一個bash腳本與線
klist | grep DHCPTEST.COM > /dev/null
我知道klist的話,將返回DHCPTEST.COM線,所以我知道grep的應返回true(0)和腳本時從命令提示符$運行?確實返回0.
但是,當從C程序(DHCPD)調用腳本時,該行返回False(即$?設置爲1) - 爲什麼?
爲了避免混淆,拼出來:
grep -q DHCPTEST.COM <(klist)
最有可能的任何行爲上的差異是由於
klist
或從grep
)使用上述中,通過使用命令替換
我已經嘗試了bash shell和sh shell(調用腳本的代碼是使用exec命令並且似乎使用Bourne shell)。作爲$?從最後一個執行的命令返回,我希望它來自grep命令,正如我所說的,當從命令行執行腳本時,該行將返回0值;只有在C程序中調用腳本時,返回值纔會改變。 – user1087598
我確信POSIX在那裏有話要說,但它不能說是完全顯而易見的,因爲「$?從最後執行的命令返回,這意味着它將返回'grep' exitcode:管道的參與進程並行運行,即同時運行。我確信POSIX將要求$ $的某種邏輯,但正如我所說,這並不明顯,我必須自己去查看它。 – sehe
我試過你的方法和$?在腳本從命令行執行時仍然設置爲0,當從DHCPD調用時設置爲1。 – user1087598
你怎麼確定的結果由C調用時更換管避免可能模糊?那是'系統'嗎? 'execve'? 'execvpe'?你指定'bash'還是可以使用'/ bin/sh'?你怎麼知道這條線返回什麼? – sehe
如果您可以放心,請分享您使用運行命令的代碼。我懷疑執行可能不會成功,如果沒有匹配就會產生錯誤。 – sehe