2015-01-20 3 views

ответ

3

Первая команда exec должна использоваться только в скрипте, а не в терминале командной строки. Он заменяет оболочку программой foobar вместо того, чтобы запускать ее как отдельный дочерний процесс. Любые команды в скрипте после exec foobar не будут выполнены (даже если оболочка не может найти foobar для выполнения); если это сеанс интерактивного терминала, он сообщит об ошибке и продолжит работу.

exec [-cl] [-a name] [command [arguments]]

Если команда поставляется, он заменяет оболочку без создания нового процесса. Если предоставляется опция -l, оболочка помещает тире в начале нулевого аргумента, переданного команде. Это то, что делает программа входа в систему. Опция -c заставляет команду запускаться с пустой средой. Если поставляется -a, оболочка передает имя в качестве нулевого аргумента для команды. Если по какой-либо причине команда не может быть выполнена, вызывается неинтерактивная оболочка, если не включена опция оболочки execfail. В этом случае он возвращает сбой. Интерактивная оболочка возвращает сбой, если файл не может быть выполнен.

Второй exec (с перенаправлением ввода/вывода, но без команды) изменяет вещи так, что стандартный поток ошибок идет в файл /var/log/foobar.log. Любые дополнительные сообщения об ошибках из оболочки или из команд, выполняемых оболочкой, переходят в файл журнала (если нет другой партии перенаправления ввода-вывода).

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

+0

Спасибо Джонатан, который очень помог. – user3809572

1
exec foobar 

заменит процесс оболочки с foobar. Я не думаю, что вы имеете в виду exec 2>/var/log/foobar.log, а скорее exec foobar 2>/var/log/foobar.log. Это сделает то же самое с отправкой 2 стандартных сообщений об ошибках в указанный файл журнала. Вы можете прочитать man-страницу here.

exec(1) команда похожа на вызов exec(3). Он заменяет сегмент кода процесса вызова на вызов вызываемой программы. 1 и 3 означают разделы справочной страницы.

+1

'exec 2>/var/log/foobar.log' имеет конкретное и полезное значение. –

+0

Спасибо за подробный ответ. – user902384

Смежные вопросы