为什么我无法将此自定义节点路径添加到 /etc/profile.d 脚本中?

为什么我无法将此自定义节点路径添加到 /etc/profile.d 脚本中?

我的配置文件的包含链可能有问题,或者我的系统或我对 profile.d (RHEL7) 的理解可能有问题。

我添加了一个/etc/profile.d .sh用于节点安装的脚本,同时尝试清理 .bashrc。问题是它没有$PATH像我希望的那样附加。

请注意,该问题既通过我的主终端(通过 putty 进行 ssh)发生,也直接从控制台本身发生。

$ cat ~/.bash_profile
#
# .bash_profile
#
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

$ cat /etc/profile.d/nvm_path.sh
# This adds node/nvm(node version manager) to path, and then initializes nvm, and its bash completion

#Load NVM
if [ -f ~/.nvm ]; then

    export NVM_DIR="$HOME/.nvm"
    [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

    if [ -f $NVM_DIR/bash_completion ]; then

        [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
    fi
fi

# Force npm onto the path (only needed if its not available on your node installation)
if [ -f ~/.npm/ ]; then
    PATH=$PATH:$HOME/.npm
fi

# Include node_mod bins in PATH, which are usually symlinked here (gulp,
# cordova, etc..)
if [ -f $HOME/.npm-packages/bin ]; then

    #note is a hyphen, not an underscore
    PATH=$PATH:$HOME/.npm-packages/bin
fi

export PATH

/etc/profile其本身而言,我的理解是,权限可以是只读的,因为它们是来源的,而不是执行的,所以我认为这不是问题。-rw-r--r--. 1 root root 1795 May 4 2016 profile

我错过了什么?

我认为问题出在某个地方,因为脚本最初是由 root 加载的,所以路径无效。问题:我尝试加载用户路径的位置。关于这个还能做什么?我是否需要添加 $LOGGED_USER 变量来代替if [ -f ~/.nvm ],甚至可能$HOME? 该变量是什么?

经过进一步研究,问题似乎是 root 正在加载脚本,因此 $HOME,甚至 $USER,永远不可用,即使我在那里设置一个条件来检查 root 是否正在加载,因为 root 总是在源代码剧本。

e.g. 
if [[ $EUID -ne 0 ]]; then
    USERDIR=$HOME
else
    USERDIR=/home/$USER
fi

if [ -f $USERDIR/.nvm ]; then
#...

我需要在用户登录后进行 var 检查,而不是在 root 获取它时进行。

看起来像这样的东西注定会出现在 /etc/skel/.bash_profile 中,除非有人想出了一个聪明的 bash 脚本想法。关于如何在这里完成此操作的任何想法,以便我不必使用 /etc/skel?

相关内容