Linux:: /etc/profile.d 中的共享别名不适用于 root 用户,为什么?

Linux:: /etc/profile.d 中的共享别名不适用于 root 用户,为什么?

在我的 Fedora 14 开发机器上,我可以将 sharedAliases.sh 文件添加到 /etc/profile.d - 然后我的用户和 root 用户都可以访问共享别名。

切换到远程 CentOS 5.7 机器,看起来是完全相同的配置,没有骰子,root 用户无权访问共享别名。

这可能是因为我通过 SSH 进入 CentOS 机器,不确定。无论如何,蹩脚的解决方法是将共享别名复制到 root 用户的 .bashrc 中,因为这是我能够将所需首选项放入 root 的唯一方法(是的,我知道我应该使用 sudo,但多年来一直在使用 su)。

非常感谢您的想法,如果可能的话,最好不要重复别名。

答案1

一定与通过 ssh 执行 su 命令与直接登录到机器时执行 su 命令之间的差异有关

我怀疑你执行的su命令没有破折号(-),如果是这样,它将调用一个交互式未登录shell。结合你只有以下内容/root/.bashrc

# Test for an interactive shell.  There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.
if [[ $- != *i* ]] ; then
    # Shell is non-interactive.  Be done now!
    return
fi

(非来源/etc/bashrc

而如果你直接登录或使用su -,它将调用登录shell,/etc/profile已被读取sharedAliases.sh并将被执行。

要查看使用不同 shell 读取的文件,请以 root 身份执行以下命令,将日志添加到所有这些文件中:

echo "echo 'running /etc/bashrc'" >> /etc/bashrc
echo "echo 'running /etc/profile'" >> /etc/profile
echo "echo 'running /root/.bashrc'" >> ~/.bashrc

创建测试别名:

# echo "alias list='ls'" > /etc/profile.d/test.sh

现在,以普通用户身份登录并使用su,您将看到类似以下内容:

$ su
Password: 
running /root/.bashrc
bash-3.2# list
bash: list: command not found

su -

$ su -
Password: 
running /etc/profile
running /root/.bashrc
# list
total 226540
-rw-rw-r-- 1 root root     60148987 Apr  1  2011 3241948.flv

相关内容