有了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
,如上所述,可能需要注销并返回或重启。