如何在不读取~/.profile的情况下运行sh?

如何在不读取~/.profile的情况下运行sh?

例如bash,可以通过传递标志--norc --noprofile来阻止读取 shell 初始化文件。

相当于什么sh

如果没有sh,是否至少有 1 个dash

(我尝试过基于暂时取消设置的黑客攻击HOME,但它们对于生产工作来说似乎太脆弱了。)

答案1

sh仅负载.profile 如果它是登录 shell,即如果使用以 开头的参数 0 调用它-。因此,如果您不想/etc/profile~/.profile读取,请使用默认参数 0(可执行文件的名称)调用 shell。

如果某些东西将 shell 作为登录 shell 执行,则您无法控制参数。如果不是,则该 shell 不是登录 shell。

除了 shell 是登录 shell 时加载的文件之外,某些sh实现还会加载另一个文件:环境变量中指示的文件ENV。如果您正在调用 shell 并且不想加载任何文件,请确保ENV未设置。

答案2

看起来不像。您可以在下面的链接中找到该代码。似乎没有标志来控制这种行为。

http://git.kernel.org/cgit/utils/dash/dash.git/tree/src/main.c#n147

相关内容