OSX上的Bash脚本在root和用户之间切换

时间:2013-04-17 16:16:26

标签: macos bash rvm

我正在尝试编写一个脚本,其中包括安装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来识别我的下标?

1 个答案:

答案 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'