如果我运行这个脚本,如何将超级用户权限传递给它?我写这篇文章只是为了用基础知识来设置新机器。我不想以提升的权限运行每个命令,但sudo
我想用它们运行那些确实具有提升权限的命令。
如何让某些命令以普通用户身份运行sudo
,而另一些命令以普通用户身份运行?
#!/bin/sh
# If Linux, install nodeJS
if $(uname) = 'Linux';
then
export IS_LINUX=1
# Does it have aptitude?
if -x "which apt-get";
then
export HAS_APT=1
# Install NodeJS
sudo apt-get install --yes nodejs
fi
# Does it have yum?
if -x "which yum" ;
then
export HAS_YUM=1
# Install NodeJS
sudo yum install nodejs npm
fi
# Does it have pacman?
if -x "which pacman" ;
then
export HAS_PACMAN=1
# Install NodeJS
pacman -S nodejs npm
fi
fi
# If OSx, install Homebrew and NodeJS
if $(uname) = 'Darwin' ;
then
export IS_MAC=1
if test ! "$(which brew)"
then
echo "================================"
echo " Installing Homebrew for you."
echo "================================"
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
export HAS_BREW=1
elif -x 'which brew' ;
then
export HAS_BREW=1
brew update
fi
# Install NodeJS
brew install --quiet node
fi
# Does it have python?
if -x "which python" ;
then
export HAS_PYTHON=1
if -x "which pip" ;
then
pip list --outdated | cut -d ' ' -f1 | xargs -n1 pip install -U
export HAS_PIP=1
fi
fi
# Does it have node package manager?
if -x "which npm" ;
then
export HAS_NPM=1
else
echo "NPM install failed, please do manually"
fi
# Does it have ruby gems?
if -x "which gem" ;
then
export HAS_GEM=1
fi
bash 脚本的其余部分(我没有详细介绍)使用 npm、apt、yum、brew 或 pacman 从数组安装软件包,具体取决于计算机。它只安装简单的东西,比如git
,wget
等等。
答案1
第一次调用时sudo
会提示输入密码。然后,根据配置,如果在 N 分钟(默认 5 分钟 IIRC)内调用,则不需要再次输入密码。
你可以这样做:
sudo echo >/dev/null || exit 1
或者也许是这样的:
sudo -p "Become Super: " printf "" || exit 1
在脚本开始时。
如果你想阻止任何人这样做,sudo ./your_script
你也应该检查 EUID (巴什):
if [[ $EUID -eq 0 ]]
then
printf "Please run as normal user.\n" >&2
exit 1
fi
或类似的东西:
if [ "$(id -u)" = "0" ]
...
无论如何,还要检查您的目标是哪个 shell。 IE
- https://wiki.debian.org/DashAsBinSh
- https://wiki.ubuntu.com/DashAsBinSh
- https://lwn.net/Articles/343924/
ETC。
到“让它活着”一个人可以做就像是:
while true; do
sleep 300
sudo -n true
kill -0 "$$" 2>/dev/null || exit
done &