Shell 会话在发出命令后自行退出 "exec<>5"

Shell session exited by itself after issuing command "exec<>5"

在 Linux 或 MacOS 中发出以下两个命令时,Shell 会话退出并且没有显示任何错误消息。

➜  ~  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 --version GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2009 Free Software Foundation, Inc.

/bin/sh 在我的 MacOS 上:

➜ ~ sh --version GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14) Copyright (C) 2007 Free Software Foundation, Inc.

当提到Linux或Unix等命令行时,exec是一个BOURNE和POSIX shell命令,用命令替换当前的shell进程执行后指定。此命令不会创建新的 PID。例如,如果您要 运行 exec <command>,则 shell 将被该命令替换。退出该命令后,shell 将退出。
您也可以查看这些链接。

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

What are the uses of the exec command in shell scripts?

“<”之前的默认文件描述符是 stdin,因此请将您的命令读作 exec 0<>5。即,将 stdin 替换为 read/write from/to 名为“5”的文件。由于文件为空,shell 退出(不再输入)。如果您实际将 shell 命令放入文件中,您会看到这种情况发生。试试这个:

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