从shell脚本返回值而不使用echo

时间:2014-02-04 18:55:23

标签: c++ linux bash

我有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的值。知道如何解决这个问题吗?

2 个答案:

答案 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 0exit 1。请注意,0通常表示成功,而非0表示存在一些错误。