1

在 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,版本 4.1.2(1)-release (x86_64-redhat-linux-gnu) 版权所有 (C) 2009 Free Software Foundation, Inc.

/bin/sh 在我的 MacOS 上:

➜ ~ sh --version GNU bash,版本 3.2.57(1)-release (x86_64-apple-darwin14) 版权所有 (C) 2007 Free Software Foundation, Inc.

4

2 回答 2

1

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

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

shell 脚本中 exec 命令的用途是什么?

于 2015-11-21T10:46:15.673 回答
1

“<”之前的默认文件描述符是标准输入,因此将您的命令读取为exec 0<>5. 也就是说,将 stdin 替换为对名为“5”的文件的读/写。由于文件为空,shell 退出(不再输入)。如果您实际上将 shell 命令放入文件中,您会看到这种情况发生。试试这个:

echo 'echo here i am; sleep 3' >5
exec <>5
于 2015-11-21T13:25:35.970 回答