从这问题我的理解是,根据操作系统的不同sh
,bash
行为也会有所不同。
做着做着env
我alias
就能说出来:
每次我打开 OSX 终端或运行bash
变量时,$SHELL=/bin/bash
都会source ~/.profile
调用source ~/.bashrc
。如果我运行$sh
命令source ~/.profile
,也source ~/.bashrc
不会调用,因此没有定义任何别名。
现在在 Linux 或 UNIX 服务器上使用bash
或sh
:
我如何知道登录时运行了哪些脚本?
答案1
首先识别你的 shell,如另一个答案中所述,这可以通过附言命令 ...
$ ps
PID TTY TIME CMD
3360 pts/2 00:00:00 bash
3702 pts/2 00:00:00 ps
要确定正在读取哪些文件,您需要调查您正在登录的系统。'bash' shell 有许多“如果这样”则“执行那样”否则“执行其他操作”选项。要查看所读取文件的完整描述,请参阅这里,但通常列表是......
- /etc/配置文件
- $HOME/.bash_profile
- $HOME/.bashrc(如果在 .bash_profile 中配置了)
- $HOME/.bash_logout (注销,而不是登录)
对于 Bourne shell ('sh'),登录时通常如下操作
- /etc/配置文件
- $HOME/.profile
在我不熟悉的系统上,我喜欢在期望读取的任何启动文件中添加一行,以测试标准输出是否连接到终端,如果是,则显示文件名。在此示例中,我在 .bash_profile 文件中使用它。
[ -t 1 ] && echo "reading .bash_profile"
这适用于 bash 或 sh(以及其他一些衍生产品)。这很有用,因为我知道正在读取什么,何时读取,并且如果我遇到错误,我知道它们来自哪个文件(第一个回显消息之前的错误可能来自登录过程本身,或者来自系统范围的 /etc/profile。
也不要忘记,您可以随时创建自己的定制启动文件,并通过将它们包含在已经来源的文件中来自行包含它们。
答案2
/etc/passwd
/etc/passwd 的最后一个字段将告诉您您的登录 shell。ps
运行 ps 还会告诉你(以及 shell 的级别)PID TTY TIME CMD 5802 pts/0 00:00:00 bash 6292 pts/0 00:00:00 ps