![如何在交互模式下调用 shell 脚本](https://linux22.com/image/1399715/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%BA%A4%E4%BA%92%E6%A8%A1%E5%BC%8F%E4%B8%8B%E8%B0%83%E7%94%A8%20shell%20%E8%84%9A%E6%9C%AC.png)
当我打电话时:
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