当 sh 链接到 bash 时运行任何类型的登录脚本

当 sh 链接到 bash 时运行任何类型的登录脚本

我的问题:我的网络主机向他们的共享服务器提供 ssh。我想设置几个别名等,所以我试图运行任何风格的登录脚本。如果我的 shell 是普通的 bash,我只需将我的内容添加到其中一个点文件中即可完成。

现在,碰巧我的 shell 被指定为/bin/sh,它链接到 bash:

sh-3.2$ /bin/sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
sh-3.2$ /bin/bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
sh-3.2$

我尝试过创建所有常见的嫌疑人~/.bash_profile,,,,,,但没有~/.bash_login运气。~/.bashrc~/.profile.login

我可以做什么来在启动时执行命令?有哪些我忘记尝试的文件名?应该这些在我的条件下有效吗?即我的主机是否做了一些禁用登录脚本的操作?

在我弄清事实之前,我不想要求我的主机为我设置不同的 shell。

答案1

来自Bash 手册部分6.2 Bash 启动文件:

使用名称 sh 调用

如果使用名称调用 Bash sh,它会尝试尽可能模仿 sh 历史版本的启动行为,同时也符合 posix 标准。

当作为交互式登录 shell 或带有该选项的非交互式 shell 调用时--login,它首先尝试按顺序读取并执行来自/etc/profile和 的命令。~/.profile--noprofile选项可用于抑制这种行为。当作为名为 的交互式 shell 调用时sh,Bash 会查找变量ENV,如果定义了该变量,则扩展其值,并使用扩展后的值作为要读取和执行的文件的名称。由于调用 as 的 shellsh不会尝试从任何其他启动文件读取和执行命令,因此该--rcfile选项无效。使用该名称调用的非交互式 shellsh不会尝试读取任何其他启动文件。

答案2

您可以运行 chsh 将 shell 更改为 /bin/bash。

chsh -s /bin/bash

作为 /bin/sh 调用的 bash 应在登录时执行您的 ~/.profile。

相关内容