如何在交互模式下调用 shell 脚本

如何在交互模式下调用 shell 脚本

当我打电话时:

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

相关内容