У меня есть 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
. Любая идея, как обойти это?
Вам действительно не нужно возвращаться, просто измените свой код на это:
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++.
Вы хотите использовать exit 0
и exit 1
в команде bash. Обратите внимание: 0 обычно означает успех, а не-0 означает, что была некоторая ошибка.
bash
для запуска еще большего количества программ.