为什么在 .profile 中获取脚本不起作用?

为什么在 .profile 中获取脚本不起作用?

我有一个可执行脚本,我想在每次登录或打开新的交互式 shell 时运行该脚本。我添加了此可执行文件的路径,.profile并通过添加此行来获取它.profile

source $HOME/bin/wrapper

重新启动后,该脚本未运行。

.profile为什么即使重新启动 Fedora 后 bash 也不会执行 bash 中的脚本?

编辑:让问题更清楚

答案1

我做了一些调查,发现采购脚本.profile不起作用有两个原因:

  1. 当您打开新的终端会话时,bash 将作为交互式非登录 shell 运行。由于.profile仅针对非交互式登录 shell 运行,因此启动终端会话不会运行它。

  2. 尽管该脚本源自登录时.profile,但与小路设置在登录时导出到子进程的环境变量.profile,a来源是一个命令,不能导出到从登录时初始化的第一个 bash 实例启动的子进程。换句话说,source它是交互式的,并且需要是.bashrc在交互式非登录 shell 中运行的唯一启动文件。

TL;DR.profile仅在登录时获取脚本一次,并且不会传递到终端会话的环境。因此,我通过将其放入来获取脚本.bashrc

要回答上述问题,我~/.bash_profile没有来源命令已添加到.profile

奖金:由于这些原因,我假设设置的别名.profile也不起作用,因为它是每次在终端窗口中创建新环境时都需要执行的命令。

答案2

来自man bash(强调我的):

当 bash 作为交互式登录 shell 或带有 --login 选项的非交互式 shell 被调用时,它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,并从中读取和执行命令第一个存在且可读的。

~/.bash_profile正如 jasonwryan 所说,您可能有一个,因此您的内容~/.profile永远不会被阅读。这个答案建议~/.profile在您的~/.bash_profile.您可以这样做,也可以将可执行脚本作为源代码~/.bash_profile

也可以看看,Bash 在线手册

相关内容