我有我的 root 用户和另一个用户 testuser。现在在 testuser 的 .bashrc 中,有一些别名,例如 ls -a 的 la 。但是当我登录到 testuser 并尝试运行 la 时,它给出了错误:-sh: la: not find
即使当我尝试查找 $HOME 时,它也会说权限被拒绝(?)
这减慢了我的工作速度!帮助!
答案1
来自 shell 的消息以 开头-sh
。这给出了两个重要线索:
- 前导
-
表明这是一个登录 shell。按照惯例,登录程序(您在其中键入用户名和密码的程序,可以是login
、gdm、sshd 等)启动一个 shell,程序名称设置为以额外的-
.这样,shell 就知道它是登录 shell 并读取~/.profile
或其他会话启动文件。 - 外壳的名字是
sh
。因此用户的登录 shell 设置为/bin/sh
,而不是 bash。要么/bin/sh
是 bash 的符号链接,要么是其他 shell,例如 dash。当以 name 调用 bash 时sh
,为了兼容性,它不会读取其配置文件,而只会读取标准文件(在登录 shell~/.profile
中/etc/profile
,在非登录 shell 中不会读取任何文件)。所以无论哪种方式~/.bashrc
都不会被读取。
如果您显式调用 bash,它将读取.bashrc
.即使您已经指定了命令,您也需要传递-t
标志来告诉它打开终端。ssh
ssh -t testuser@nameofhost bash
您可能希望将用户的登录 shell 切换为 bash 而不是/bin/sh
.作为testuser
,运行命令
chsh -s /bin/bash
/usr/local/bin/bash
更改bash 所在位置的路径。如果您chsh
不带参数调用,您将得到一个菜单,显示您可以选择哪些 shell。
答案2
您可以检查系统范围的 /etc/bashrc 和/或 /etc/profile 文件。您也可以将类似的内容添加到文件中:
if [ `whoami` == "testuser" ]
then
alias x='echo x' # alias list..
fi