理清我的 bash 命令、别名和配置的存放位置

理清我的 bash 命令、别名和配置的存放位置

在我看来,当我通过 SSH 进入或在本地使用的每个 Linux 发行版(主要是 RHEL/CentOS 和 Debian/Ubuntu 机器)时,对于当我在本地登录时、当我通过 SSH 进入时、当我打开 tmux 时或在 VIM 内部运行 shell 命令时运行哪个.bashrc和哪个都有不同的想法。.bash_profile

我确实有一些脚本希望在我登录时运行,无论是通过 SSH 还是在控制台上。例如,我希望在登录时看到uptimefree和的输出df。我可以从计算机本身登录(通过 Konsole 的 KDE 会话中的 Kubuntu 桌面),或者我可以从家里通过 SSH 登录到同一台机器。但是,这些脚本不应该在例如从 VIM 中运行 shell 命令时运行。它们应该在.bashrc或 中吗.bash_profile

同样,我有一些别名,无论我从本地计算机(KDE 和 Konsole)登录还是通过 SSH 登录,我都希望这些别名可以从 CLI 中使用。运行 shell 命令时,这些也应该可以从 VIM 中使用,也可以在 tmux 中使用。这些应该在.bashrc还是 中.bash_profile

编辑:似乎检查环境变量可能会有所帮助,使用IF条件设置我需要的东西。然后,我会将所有配置放入第三个文件.bash_dotan,然后从和两个文件中获取该文件.bashrc.bash_profile以确保它始终运行。我可以将整个内容包装在一个条件中,以确保如果和都是源IF [ALREADY_RUN],它不会运行两次。这种方法是否存在我没​​有预料到的问题?.bashrc.bash_profile

答案1

可能最简单的方法是查看通过不同方法登录时设置了哪些环境变量,然后使用 Daniel Beck 提供的表格建议,在相应的文件中设置条件语句.bash*。例如,当我通过 SSH 登录到我的 Web 服务器时,SSH_TTY会设置诸如 之类的变量,而当我从 X 登录到我的主框时,则不会设置这些变量。

if [ "$SSH_TTY" ]; then
    echo "SSH_TTY is $SSH_TTY"
else
    echo "You are logged in locally"
fi 

您可以通过在命令行中运行export和来找出设置了哪些变量。您也可以运行,但如果您安装了(Ruby 版本管理器),您将获得脚本的全部内容,因此请使用 之类的分页器。envsetrvmless

相关内容