每次调用/ bin / sh时你能运行一个脚本吗?

有了bash,你可以设置你的〜/ .bashrc文件来每次创build一个新的bash shell时运行一些东西。 / bin / sh可以做同样的事吗? (顺便说一句,这是在Debian上)。

现在,我只想在/ bin / sh调用时回显“我是sh”。 在bash(“echo”我是bash'“放在文件的顶部)很容易做到。

谢谢!

当在debian-like系统上启动一个dash的登录shell,它是/bin/sh时,它将读取~/.profile 。 如果您还希望为交互式非登录shell读取配置文件,请将以下行添加到~/.profile文件中:

 ENV=$HOME/.shinit; export ENV 

然后,在变量ENV出现在环境中, $HOME/.shinit文件将被每一个新的交互式(破折号)外壳所$HOME/.shinit

您可以将ENV指定的文件名更改为您喜欢的任何文件名。

为了确保破折号登录shell已经将ENV添加到环境中,您可能需要注销并重新登录,或者可能需要重新启动,具体取决于您的系统设置。

文档

这是记录在man dash

登录shell首先从文件/ etc / profile和.profile(如果存在)读取命令。 如果在进入交互式shell时设置了环境变量ENV,或者在登录shell的.profile中设置了环境变量ENV,则shell接下来将从ENV中指定的文件读取命令。 因此,用户应该将仅在登录时执行的命令放置在.profile文件中,以及为ENV文件内的每个交互式shell执行的命令。

假设我们有如下的文件:

 $ echo "ENV=$HOME/.shinit; export ENV" >>~/.profile $ cat .shinit echo FOUND ME 

由于我只是将ENV行添加到~/.profile文件中,因此ENV尚不在环境中。 如果我们运行dash

 $ dash $ 

什么都没有发生,因为这是一个非登录shell, ENV尚未在环境中。

如果我们启动一个登录shell, ENV放在环境中并运行~/.shinit

 $ dash -l FOUND ME 

如果作为那个shell的子~/.shinit ,我们运行一个交互式非登录shell,那么将会运行~/.shinit因为父shell创建了ENV变量:

 $ dash FOUND ME 

上面的登录shell创建的环境仅影响其子级。 为了确保所有交互式dash外壳在其环境中都具有ENV ,如上所述,可能需要注销并返回或重启。