Сеанс оболочки завершился сам по себе после выполнения команды "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>
оболочка будет заменена этой командой. Когда эта команда будет завершена, оболочка завершится.
Вы также можете взглянуть на эти ссылки.