Ищите базовую помощь в программировании оболочки.Общие сведения о команде exec
Предположим, что мы имеем команду, известную как foobar
, то, что эффект оболочки вызова
exec foobar
exec 2> /var/log/foobar.log
Ищите базовую помощь в программировании оболочки.Общие сведения о команде exec
Предположим, что мы имеем команду, известную как foobar
, то, что эффект оболочки вызова
exec foobar
exec 2> /var/log/foobar.log
Первая команда exec
должна использоваться только в скрипте, а не в терминале командной строки. Он заменяет оболочку программой foobar
вместо того, чтобы запускать ее как отдельный дочерний процесс. Любые команды в скрипте после exec foobar
не будут выполнены (даже если оболочка не может найти foobar
для выполнения); если это сеанс интерактивного терминала, он сообщит об ошибке и продолжит работу.
exec [-cl] [-a name] [command [arguments]]
Если команда поставляется, он заменяет оболочку без создания нового процесса. Если предоставляется опция
-l
, оболочка помещает тире в начале нулевого аргумента, переданного команде. Это то, что делает программа входа в систему. Опция-c
заставляет команду запускаться с пустой средой. Если поставляется-a
, оболочка передает имя в качестве нулевого аргумента для команды. Если по какой-либо причине команда не может быть выполнена, вызывается неинтерактивная оболочка, если не включена опция оболочки execfail. В этом случае он возвращает сбой. Интерактивная оболочка возвращает сбой, если файл не может быть выполнен.
Второй exec
(с перенаправлением ввода/вывода, но без команды) изменяет вещи так, что стандартный поток ошибок идет в файл /var/log/foobar.log
. Любые дополнительные сообщения об ошибках из оболочки или из команд, выполняемых оболочкой, переходят в файл журнала (если нет другой партии перенаправления ввода-вывода).
Если команда не указана, перенаправления могут использоваться для изменения текущей среды оболочки. Если ошибок перенаправления нет, статус возврата равен нулю; иначе статус возврата не равен нулю.
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 означают разделы справочной страницы.
'exec 2>/var/log/foobar.log' имеет конкретное и полезное значение. –
Спасибо за подробный ответ. – user902384
Спасибо Джонатан, который очень помог. – user3809572