0

我正在尝试编写一个脚本来安装 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。而且,我可以 man source 并且有一本手册,所以我知道该 source 已安装。

如何切换到 $SUDO_USER 并且仍然让 bash 识别我的下标?

4

1 回答 1

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'
于 2013-04-17T19:57:55.393 回答