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
在 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