使用bash,您可以设置〜/ .bashrc文件,以便在每次创建新的bash shell时运行。可以用/ bin / sh做同样的事情吗? (顺便说一句,这是在Debian上)。
现在,我只想在调用/ bin / sh时回显'我是sh'。在bash中很容易做到(“echo'我是bash'”放在文件的顶部)。
谢谢!
答案 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
,可能需要注销并重新登录或重新启动。