你可以在每次/ bin / sh调用时运行脚本吗?

时间:2014-09-26 04:26:51

标签: linux bash shell sh

使用bash,您可以设置〜/ .bashrc文件,以便在每次创建新的bash shell时运行。可以用/ bin / sh做同样的事情吗? (顺便说一句,这是在Debian上)。

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

谢谢!

1 个答案:

答案 0 :(得分:3)

在类似debian的系统上启动dash /bin/sh的登录shell时,它将显示~/.profile。如果您还想要为交互式非登录shell读取配置文件,请将以下行添加到~/.profile文件中:

ENV=$HOME/.shinit; export ENV

然后,在环境中出现变量ENV的情况下,文件$HOME/.shinit将与每个新的交互式(破折号)shell一起提供。

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

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

文档

man dash中记录了这一点:

  

登录shell首先读取        来自文件/ etc / profile和.profile的命令(如果存在)。如果环境变量为ENV        在进入交互式shell时设置,或者设置在登录shell的.profile中,即shell        next从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的子代,我们运行交互式非登录shell,那么将运行~/.shinit,因为父shell创建了ENV变量:

$ dash
FOUND ME

上面的登录shell创建的环境仅影响其子项。如上所述,要确保所有交互式dash shell在其环境中都有ENV,可能需要注销并重新登录或重新启动。