我的问题:我的网络主机向他们的共享服务器提供 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。