我正在尝试编写一个脚本,其中包括安装rvm。为了做到这一点,脚本以root身份运行(sudo setup.sh),其中setup.sh调用安装rvm的下标。但是,为了安装rvm我需要成为用户,所以我想从root用户切换到用户。我是这样做的:
在setup.sh中:
# Do some stuff as root
# Install rvm
sudo -u $SUDO_USER source path/to/rvm_install/script
sudo -u install_rvm
但是,当我这样做时,我从bash中得到了这个错误:
sudo: source: command not found
如果我which source
我得到的东西既不是root也不是$ SUDO_USER。但是,我可以在没有错误的情况下获取.bash_profile,例如。而且,我可以找到源码并且有一本手册,所以我知道已经安装了源码。
如何切换到$ SUDO_USER并仍然使用bash来识别我的下标?
答案 0 :(得分:0)
type source
会告诉您source
是内置shell,而不是外部命令。 Shell builtins只能在shell中使用,而不能通过sudo
等外部工具使用。
如果要执行下标并丢弃任何环境变量集,则可以执行
sudo -u $SUDO_USER bash path/to/rvm_install/script
如果install_rvm命令需要在path / to / rvm_install / script中定义的变量或函数,则可以使用
sudo -u $SUDO_USER bash -c 'source path/to/rvm_install/script; install_rvm'