当我打电话时:
execl("/bin/sh", "/bin/sh", (void *) NULL);
/bin/sh/ 程序启动后,会打开一个 shell,我可以在里面输入命令。但是,如果我调用:
execl("/bin/sh", "/bin/sh", "~/somescript.sh", (char *) 0 );
/bin/sh 程序也启动并运行给定的 shell 脚本,但随后关闭。
为什么运行 shell 脚本后 shell 不保持打开状态? 运行脚本后有什么办法可以保持 shell 保持打开状态吗?
提前致谢!
答案1
这是一种正常的 shell 行为,与从 C 运行它没有任何共同之处 - 即使您从命令行使用脚本运行 shell 也会发生这种情况:
$ sh ~/somescript.sh
此后,可能很难强制 shell 保持交互模式。我发现只有以下--rcfile [file]
选项可以做到这一点:
如果 shell 是交互式的,则从文件而不是系统范围的初始化文件
/etc/bash.bashrc
和标准个人初始化文件执行命令(请参阅下面的 INVOCATION)。~/.bashrc
即你会这样做
$ sh --rcfile ~/somescript.sh
但在这种情况下,您的系统 rc 文件(如/etc/bash.bashrc
和)~/.bashrc
将不会运行。
答案2
在脚本末尾运行交互式 shell 怎么样?
#!/bin/sh
echo STUFF
echo MORE STUFF
sh