Здравствуйте всем. Возникла проблема с выполнением команд в Linux программно. Обычные функции типа system() и popen() работают. Но работают с командной оболочкой sh. На других, а именно ash, это не работает. Как быть? Подскажите кто может. Спасибо.
>Здравствуйте всем. Возникла проблема с выполнением команд в Linux программно. Обычные функции
>типа system() и popen() работают. Но работают с командной оболочкой sh.До сюда понятно о чем речь.
>На других, а именно ash, это не работает. Как быть?
А это я уже не понял. У вас sh = ash или вы запускаете скрипт, который по ash не работает? Или как?
>>Здравствуйте всем. Возникла проблема с выполнением команд в Linux программно. Обычные функции
>>типа system() и popen() работают. Но работают с командной оболочкой sh.
>
>До сюда понятно о чем речь.
>
>>На других, а именно ash, это не работает. Как быть?
>
>А это я уже не понял. У вас sh = ash или
>вы запускаете скрипт, который по ash не работает? Или как?Скажем так: программа запускается под sh. И в ней же мы выполняется команды под system(). Все работает. Перенсим эту же программу под ash. Она запускается, но при вводе команд при system() скрипт возвращает not found при любой команде.
А полный путь к командам пробовали указывать?
Непонятно, в чём конкретно проблема в ash... Для запуска программ без использования sh есть функции execv и posix_spawn.
>Непонятно, в чём конкретно проблема в ash... Для запуска программ без использования
>sh есть функции execv и posix_spawn.Вот. Спасибо. Вызов execl("/bin/ash","ash","-c",cmd,0) - решил проблему.
Все таки интересно, почему функции system(), popen() рассчитаны только на sh...
>Все таки интересно, почему функции system(), popen() рассчитаны только на sh...sh линк на системный шелл по умолчанию: bash, ash, zsh, и. т. д.
Что показывает ls -l /bin/sh, то и будет запускаться.
Еще вопрос. Функция execl() выполняет команду, будь это простой ls или запуск сторонней программы, только 1 раз и сразу завершается. А как сделать, чтобы ввод комманд запрашивался постоянно?
Вопрос туманный. Предполагаю, что ответ - fork или posix_spawn.
>Вопрос туманный. Предполагаю, что ответ - fork или posix_spawn.Да, все разобрался с fork, waitpid и прочим. Всем спасибо.