问题
在bash脚本中,我正在使用命令...
sudo -u node bash
..从root切换到非sudo用户,这是失败的。
我正在provision.sh
为Vagrant编写脚本的上下文,以设置运行Ubuntu 16.04.3的服务器,以及使用Meteor 1.6交付应用程序所需的所有软件包。
必需的步骤之一是以nvm
非root用户身份进行安装。后nvm
安装,您需要注销,为了重新登录激活nvm
。因此,我创建了一个非sudo用户,名为meteor
,并希望在下载和安装时切换到该用户nvm
。
随后,我想切换回root
并立即以身份登录gain meteor
,以便开始使用它nvm
来安装Node.js。
您会在下面找到一个评论严重的脚本。每次我打电话时,Vagrant都会运行此脚本vagrant reload --provision
。
我应该使用什么命令代替sudo -u node bash
?
echo "# whoami" && whoami && echo "^^^^ root expected"
echo "As root, create non-sudo user meteor:"
pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
useradd -m -p $pass meteor
echo "User meteor created. ls -al /home/meteor:"
ls -al /home/meteor
echo "Install curl as root:"
apt-get install -y curl
echo "Trying sudo -u meteor bash"
sudo -u meteor bash #### THIS IS THE LINE THAT FAILS ###
echo "$ whoami" && whoami && echo "^^^^^^ meteor expected"
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash
echo "ls -al /home/meteor/.nvm # should be populated"
ls -al /home/meteor/.nvm
echo "ls -al /root/.nvm # should not exist"
ls -al /root/.nvm
echo "command -v nvm will fail silently until we log out and back in again"
#command -v nvm
exit
#### Because the script is still running as root, it halts here ####
echo "# whoami" && whoami && echo "^^^^ should be root"
sudo -u meteor bash
echo "$ whoami" && whoami && echo "^^^^^^ should be meteor"
echo "command -v nvm should work now"
command -v nvm
如果您以root权限启动脚本,但需要以特定的非root用户身份运行某些命令,则可以sudo
通过以下-u
选项使用该选项运行单个命令:
sudo -u USERNAME whoami # outputs USERNAME's user name
或启动一个子shell并在其中运行命令,例如:
sudo -u USERNAME bash -c 'whoami;echo $USER' # outputs USERNAME's user name twice
脚本中的行实际上并不会失败,您只能bash
以usermeteor
身份运行,而bash
无济于事,它只会退出而原始的根外壳程序将运行脚本的其余部分。您实际上想做的(我想)是:
…
echo "Trying sudo -u meteor bash"
sudo -u meteor bash -c '\
echo "$ whoami" && whoami && echo "^^^^^^ meteor expected"
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh |\
bash
'
echo "ls -al /home/meteor/.nvm # should be populated"
…
实现此目的的另一种方法是here文档:
…
echo "Trying sudo -u meteor bash"
sudo -u meteor bash <<EOF
echo "$ whoami" && whoami && echo "^^^^^^ meteor expected"
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh |\
bash
EOF
echo "ls -al /home/meteor/.nvm # should be populated"
…
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句