我有c ++代码,其中包含system调用,后者又调用bash oneliner
if (system("if [ `ls | wc -l` -eq 1 ]; then return 0 ; else return 1; fi") != 0)
std::cout << "returned non zero" << std::endl;
else
std::cout << "returned zero" << std::endl;
这不起作用,因为我收到此错误
-bash: return: can only `return' from a function or sourced script
如果我使用echo
而不是返回,我会获得echo
命令的返回码,而不是传递给echo
的值。知道如何解决这个问题吗?
答案 0 :(得分:2)
您真的不需要返回,只需将代码更改为:
if ( system( "[ `ls | wc -l` -eq 1 ]" ) != 0)
std::cout << "returned non zero" << std::endl;
else
std::cout << "returned zero" << std::endl;
此代码:
[ `ls | wc -l` -eq 1 ]
将根据条件返回0或1,system
将该状态返回到您的C ++代码。
答案 1 :(得分:1)
您希望在bash命令中使用exit 0
和exit 1
。请注意,0通常表示成功,而非0表示存在一些错误。