如何判断 sh 或 bash 的启动文件是什么?

如何判断 sh 或 bash 的启动文件是什么?

问题我的理解是,根据操作系统的不同shbash行为也会有所不同。

做着做着envalias就能说出来:

每次我打开 OSX 终端或运行bash变量时,$SHELL=/bin/bash都会source ~/.profile调用source ~/.bashrc。如果我运行$sh命令source ~/.profile,也source ~/.bashrc不会调用,因此没有定义任何别名。

现在在 Linux 或 UNIX 服务器上使用bashsh

我如何知道登录时运行了哪些脚本?

答案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

  1. /etc/passwd/etc/passwd 的最后一个字段将告诉您您的登录 shell。
  2. ps运行 ps 还会告诉你(以及 shell 的级别)

      PID TTY          TIME CMD
     5802 pts/0    00:00:00 bash
     6292 pts/0    00:00:00 ps
    

相关内容