Сеанс оболочки завершился сам по себе после выполнения команды "exec<>5"

При вводе двух команд ниже в Linux или MacOS сеанс оболочки завершился, и сообщение об ошибке не отображалось.

➜  ~  sh
sh-3.2$ exec<>5
sh-3.2$ exit    ==> 'exit' was issued by the shell itself!

Это дефект "/ bin / sh"? Кто-нибудь может дать какое-либо понимание?

/ bin / sh на моем RHEL:

-sh-4.1 $ sh - версия GNU bash, версия 4.1.2(1)-релиз (x86_64-redhat-linux-gnu) Copyright (C) 2009 Free Software Foundation, Inc.

/ bin / sh на моем MacOS:

Sh ~ sh - версия GNU bash, версия 3.2.57(1)-релиз (x86_64-apple-darwin14) Copyright (C) 2007 Free Software Foundation, Inc.

2 ответа

Решение

Дескриптор файла по умолчанию перед "<" - это стандартный ввод, поэтому читайте вашу команду как exec 0<>5, То есть замените стандартный ввод на чтение / запись из / в файл с именем "5". Поскольку файл пуст, оболочка завершает работу (больше не требуется ввод). Если вы на самом деле поместите команды оболочки в файл, вы увидите, что это происходит. Попробуй это:

echo 'echo here i am; sleep 3' >5
exec <>5

При обращении к командной строке, такой как Linux или Unix, exec - это команда оболочки BOURNE и POSIX, которая заменяет текущий процесс оболочки командой, указанной после exec. Эта команда не создает новый PID. Например, если вы должны были бежать exec <command>оболочка будет заменена этой командой. Когда эта команда будет завершена, оболочка завершится.
Вы также можете взглянуть на эти ссылки.

http://linux.about.com/od/commands/l/blcmdln_exec.htm

Каковы применения команды exec в сценариях оболочки?

Другие вопросы по тегам