shell - вывод ошибок, sudo/su (shell - вывод ошибок, sudo/su)

Модератор: Модераторы разделов

bestSPB
Сообщения: 112
ОС: Debian squeeze

shell - вывод ошибок, sudo/su

Сообщение bestSPB »

в общем нужно выполнить команду например через с++ в shell, и узнать были ли ошибки при выполнении, можно ли как-то это сделать.

и можно как-нибудь выполнит команду от другого пользователя, передав при этом пароль, то есть без требования на ввод.
чтобы он не запрашивал пароль а сразу бал выполнить.
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: shell - вывод ошибок, sudo/su

Сообщение nesk »

bestSPB писал(а):
12.07.2009 21:35
в общем нужно выполнить команду например через с++ в shell, и узнать были ли ошибки при выполнении, можно ли как-то это сделать.

сделать pipe
fork
в порожденном процессе закрыть дескриптор на чтения из канала.
продублировать дескриптор на запись в канал на дескрипторы с номерами 1 и 2
закрыть дескриптор на запись
сделать exec
в отце
закрыть дескриптор на запись в канал,
читать из дескриптора на чтение :)


Можно было бы использовать popen, но я не уверен, что он перенаправляет так же и вывод ошибок
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
Аватара пользователя
Alxn1
Сообщения: 402
Статус: Красноглазик со стажем
ОС: Mavericks

Re: shell - вывод ошибок, sudo/su

Сообщение Alxn1 »

system().
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: shell - вывод ошибок, sudo/su

Сообщение nesk »

Alxn1 писал(а):
12.07.2009 23:31
system().


как с помощью system можно получить в основную программу вывод ошибок запущенной команды?
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: shell - вывод ошибок, sudo/su

Сообщение Rootlexx »

nesk писал(а):
12.07.2009 22:10
Можно было бы использовать popen, но я не уверен, что он перенаправляет так же и вывод ошибок

Если стандартный вывод не нужен, то можно подменить дескрипторы:

Код: Выделить всё

popen("команда 2>&1 > /dev/null", "r");

А можно проверять весь вывод вместе, убрав последнее перенаправление.
Спасибо сказали:
svary
Сообщения: 49
ОС: Linux FC-9

Re: shell - вывод ошибок, sudo/su

Сообщение svary »

nesk писал(а):
12.07.2009 23:45
Alxn1 писал(а):
12.07.2009 23:31
system().


как с помощью system можно получить в основную программу вывод ошибок запущенной команды?

А зачем ? В исходеном посте про это ничего не говорится!
Человеку нужно узнать - выполнилась программа ПРАВИЛЬНО или НЕПРАВИЛЬНО. Для этого достаточно проанализировать код завершения. Для system :

Код: Выделить всё

RETURN VALUE
       The value returned is -1 on error (e.g.  fork(2) failed), and the return status of the command otherwise.
       This latter return status is in the format specified in wait(2).


Если запускаемая программа возвращает "нормальные" коды возврата, то этого будет вполне достаточно.

можно как-нибудь выполнит команду от другого пользователя, передав при этом пароль

Не очень корректно сформулирована проблема.
Пароль и логин передаются при открытии сессии, а не при запуске программы.
Подозреваю, что Вам нужно запустить на выполнение файл, принадлежащий другому пользователю, а Вы не входите в его группу.
Тут есть несколько путей :
1) Сисадмин разрешает выполнять этот файл ВСЕМ выполнив команду chmod 0755 <Ваш исполняемый файл>
2) Сисадмин разрешает всем запускать этот файл членам группы и включает Вас в члены группы.
3) Сисадмин прописывает в файле /etc/sudoers разрешение Вам запускать эту программу.
4) Хозяин запускаемый программы устанавливает у нее бит Set-User-Id, разрешает ее запуск ВСЕМ но программу пишет так,
что бы разные юсеры не "поубивали" друг друга.
Спасибо сказали:
Аватара пользователя
Alxn1
Сообщения: 402
Статус: Красноглазик со стажем
ОС: Mavericks

Re: shell - вывод ошибок, sudo/su

Сообщение Alxn1 »

nesk писал(а):
12.07.2009 23:45
Alxn1 писал(а):
12.07.2009 23:31
system().


как с помощью system можно получить в основную программу вывод ошибок запущенной команды?


Как ниже уже отметили, то оно в данной постановке задачи и не требуется, а коды возврата процесса system() возвращает. :) Да проще оно, чем fork()-и городить :)
Спасибо сказали: