Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell会话在发出命令“后自行退出”;执行官<&燃气轮机;5“;_Shell_Unix_Exec_Defects - Fatal编程技术网

Shell会话在发出命令“后自行退出”;执行官<&燃气轮机;5“;

Shell会话在发出命令“后自行退出”;执行官<&燃气轮机;5“;,shell,unix,exec,defects,Shell,Unix,Exec,Defects,在Linux或MacOS中发出以下两个命令时,Shell会话将退出,并且不会显示任何错误消息 ➜ ~ sh sh-3.2$ exec<>5 sh-3.2$ exit ==> 'exit' was issued by the shell itself! ➜ ~ 嘘 sh-3.2$exec5 sh-3.2$exit==>“exit”是由shell本身发出的! 这是'/bin/sh'的缺陷吗?有人能提供一些见解吗 /我的RHEL上的bin/sh: -sh-4.1$s

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

➜  ~  sh
sh-3.2$ exec<>5
sh-3.2$ exit    ==> 'exit' was issued by the shell itself!
➜  ~  嘘
sh-3.2$exec5
sh-3.2$exit==>“exit”是由shell本身发出的!
这是'/bin/sh'的缺陷吗?有人能提供一些见解吗

/我的RHEL上的bin/sh:

-sh-4.1$sh——版本 GNUBash,版本4.1.2(1)-发行版(x86_64-redhat-linux-GNU) 版权所有(C)2009免费软件基金会 /我的MacOS上的bin/sh:

➜ ~ sh--版本 GNUBash,版本3.2.57(1)-发布版(x86_64-apple-darwin14) 版权所有(C)2007免费软件基金会
当引用诸如Linux或Unix之类的命令行时,exec是一个BOURNE和POSIX shell命令,它用exec之后指定的命令替换当前shell进程。此命令不会创建新的PID。例如,如果要运行
exec
,shell将替换为该命令。当该命令退出时,shell将退出。
你也可以看看这些链接


前面的默认文件描述符“我们上面有什么”称为“菱形运算符”,它通常用于将stdin和stdout重定向到另一个文件描述符:exec 5file。在您的示例中,您没有文件描述符,只有文件(在本例中命名为5)。但为什么它会退出,我不知道。请检查以下说明:在“11打开一个文件进行写入和读取“你是对的,这里的5是一个文件,但我不认为sh在遇到这样一个小错误后应该退出。在我的情况下,我没有替换shell进程,只是将其stdin/stdout重定向到另一个文件描述符。回答正确。谢谢大家。
echo 'echo here i am; sleep 3' >5
exec <>5