Возвращаемое значение из сценария оболочки без использования echo

0

У меня есть c++ код, который включает системный вызов, который, в свою очередь, вызывает 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 вместо return, я получаю код возврата команды echo вместо значения, переданного в echo. Любая идея, как обойти это?

  • 0
    Было бы гораздо проще просто открыть текущий рабочий каталог в C ++, чем использовать bash для запуска еще большего количества программ.
  • 0
    Этот код просто для демонстрации моей проблемы, выражение «если» в моем системном вызове намного сложнее
Теги:

2 ответа

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

Вы хотите использовать exit 0 и exit 1 в команде bash. Обратите внимание: 0 обычно означает успех, а не-0 означает, что была некоторая ошибка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню