设置别名在以 root 身份创建时立即生效,无需重新启动

设置别名在以 root 身份创建时立即生效,无需重新启动

我创建了一个 Shell 脚本来安装一些以 root 身份运行的软件。作为此过程的一部分,它会设置一个别名来指向一个 shell 脚本,以便用户更轻松地运行它。它通过将别名附加到~/.bashrc用户帐户来实现这一点。以下是执行此操作的代码:

    # Add alias so entering 'statusmonitor' works from any folder
    if grep -q "alias statusmonitor=" "$USER_HOME/.bashrc"; then
        str="Updating 'statusmonitor' alias in .bashrc file..."
        printf "%b %s" "${INFO}" "${str}"
        # Update existing alias for 'statusmonitor'
        sed -i -e "/^alias diginode=/s|.*|alias statusmonitor='$STATUS_MONITOR_SCRIPT'|" $USER_HOME/.bashrc
        printf "%b%b %s Done!\\n" "${OVER}" "${TICK}" "${str}"
    else
        str="Adding 'statusmonitor' alias to .bashrc file..."
        printf "%b %s" "${INFO}" "${str}"
        # Append alias to .bashrc file
        echo "" >> $USER_HOME/.bashrc
        echo "# Alias for Status Monitor so that entering 'statusmonitor' will run this from any folder" >> $USER_HOME/.bashrc
        echo "alias statusmonitor='$STATUS_MONITOR_SCRIPT'" >> $USER_HOME/.bashrc
        printf "%b%b %s Done!\\n" "${OVER}" "${TICK}" "${str}"
    fi

USER_HOME是存储用户主文件夹的变量,例如/home/ubuntu/

STATUS_MONITOR_SCRIPT是存储状态监视器 Shell 脚本位置的变量 -~/statusmonitor/statusmonitor.sh

上面的代码按预期工作。问题是我现在想加载别名,这样用户就不需要注销并重新登录会话了。我目前正在尝试这个,但它不起作用:

        # Load new alias immediately
    if [ "$NewInstall" = true ]; then
        str="Load new alias now..."
        printf "%b %s" "${INFO}" "${str}"
        sudo -u $USER_ACCOUNT alias diginode="$STATUS_MONITOR_SCRIPT"
        printf "%b%b %s Done!\\n" "${OVER}" "${TICK}" "${str}"
    fi

存储USER_ACCOUNT当前用户,以便即使脚本以 root 身份运行也可以调用它。

我希望能够在安装脚本完成时输入“statusmonitor”,但目前它不起作用,直到我重新启动终端会话。当它以 root 身份运行时,它保持别名命令不存在,即使我在 QASsudo -u用户时使用它。

奇怪的是,如果脚本刚刚完成,如果我手动输入命令,它会很好地设置别名:

alias diginode=/home/ubuntu/statusmonitor

我假设这是以 root 身份运行还是以用户身份运行的问题。有人能帮我在以 root 身份运行的脚本中加载别名而无需重启吗?

相关内容