URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8245
[ Назад ]

Исходное сообщение
"Программное выполнение команд"

Отправлено Tonn , 29-Апр-09 08:47 
Здравствуйте всем. Возникла проблема с выполнением команд в Linux программно. Обычные функции типа system() и popen() работают. Но работают с командной оболочкой sh. На других, а именно ash, это не работает. Как быть? Подскажите кто может. Спасибо.

Содержание

Сообщения в этом обсуждении
"Программное выполнение команд"
Отправлено phpcoder , 29-Апр-09 08:53 
>Здравствуйте всем. Возникла проблема с выполнением команд в Linux программно. Обычные функции
>типа system() и popen() работают. Но работают с командной оболочкой sh.

До сюда понятно о чем речь.

>На других, а именно ash, это не работает. Как быть?

А это я уже не понял. У вас sh = ash или вы запускаете скрипт, который по ash не работает? Или как?


"Программное выполнение команд"
Отправлено Tonn , 29-Апр-09 08:58 
>>Здравствуйте всем. Возникла проблема с выполнением команд в Linux программно. Обычные функции
>>типа system() и popen() работают. Но работают с командной оболочкой sh.
>
>До сюда понятно о чем речь.
>
>>На других, а именно ash, это не работает. Как быть?
>
>А это я уже не понял. У вас sh = ash или
>вы запускаете скрипт, который по ash не работает? Или как?

Скажем так: программа запускается под sh. И в ней же мы выполняется команды под system(). Все работает. Перенсим эту же программу под ash. Она запускается, но при вводе команд при system() скрипт возвращает not found при любой команде.


"Программное выполнение команд"
Отправлено angra , 29-Апр-09 09:40 
А полный путь к командам пробовали указывать?

"Программное выполнение команд"
Отправлено const86 , 29-Апр-09 09:29 
Непонятно, в чём конкретно проблема в ash... Для запуска программ без использования sh есть функции execv и posix_spawn.

"Программное выполнение команд"
Отправлено Tonn , 29-Апр-09 11:49 
>Непонятно, в чём конкретно проблема в ash... Для запуска программ без использования
>sh есть функции execv и posix_spawn.

Вот. Спасибо. Вызов execl("/bin/ash","ash","-c",cmd,0) - решил проблему.
Все таки интересно, почему функции system(), popen() рассчитаны только на sh...


"Программное выполнение команд"
Отправлено Аноним , 29-Апр-09 12:09 
>Все таки интересно, почему функции system(), popen() рассчитаны только на sh...

sh линк на системный шелл по умолчанию: bash, ash, zsh, и. т. д.
Что показывает ls -l /bin/sh, то и будет запускаться.



"Программное выполнение команд"
Отправлено Tonn , 29-Апр-09 15:35 
Еще вопрос. Функция execl() выполняет команду, будь это простой ls или запуск сторонней программы, только 1 раз и сразу завершается. А как сделать, чтобы ввод комманд запрашивался постоянно?

"Программное выполнение команд"
Отправлено const86 , 30-Апр-09 09:32 
Вопрос туманный. Предполагаю, что ответ - fork или posix_spawn.

"Программное выполнение команд"
Отправлено Tonn , 30-Апр-09 10:33 
>Вопрос туманный. Предполагаю, что ответ - fork или posix_spawn.

Да, все разобрался с fork, waitpid и прочим. Всем спасибо.