我有一个小脚本。它是从 Youtube 教程中摘下来的,未经测试,很丑,而且不太好。它还没有完成,也不打算公开使用。它在这里:
#!/bin/bash
sudo apt-get -y install git g++ gcc-multilib g++-multilib libc6-dev-i386 lib32z1-dev lib32bz2-dev xserver-xorg-dev:i386 libfreetype6-dev:i386 libmirclient-dev:i386 libosmesa6:i386 libosmesa-dev libjpeg-turbo8-dev:i386 libgl1-mesa-dev:i386 libglu1-mesa-dev:i386 libxcursor-dev:i386 libxi-dev:i386 libxrandr-dev:i386 libxinerama-dev:i386 libxcomposite-dev:i386 libdbus-1-dev:i386 libgnutls-dev:i386 libncurses5-dev:i386 libsane-dev:i386 libv4l-dev:i386 libgphoto2-6-dev:i386 liblcms2-dev:i386 liblcms1-dev:i386 gstreamer0.10-plugins-base:i386 libcapi20-dev:i386 libcups2-dev:i386 libfontconfig1-dev:i386 libgsm1-dev:i386 libtiff5-dev:i386 libmpg123-dev:i386 libopenal-dev:i386 libxrender-dev:i386 libxml2-dev:i386 libxslt1-dev:i386 libpng12-dev:i386 libssl-dev:i386 libldap2-dev:i386 unixodbc-dev:i386
sudo apt-get -y build-dep wine1.7
cd /usr/lib/i386-linux-gnu
sudo ln -s libfreetype.so.6 libfreetype.so
sudo ln -s libOSMesa.so.6 libOSMesa.so
git clone git://source.winehq.org/git/wine.git ~/wine-git
cd ~/wine-git
cat "/home/krabica/Dokumenty/TextFiles/0099-EndlessSpace-WGL-ShareList-Hack.patch" | patch -p1
./configure
make
我警告过你。
如您所见,该脚本调用了几个命令,一些以 root 身份调用,一些以普通用户身份调用,在本例中为“krabica”(英文中的“box”(如“纸板箱”))。
问题是在我的笔记本电脑上编译 Wine 需要 2 个多小时,所以想在我睡觉时让它继续运行,但我想让我的笔记本电脑关闭/睡眠或做任何事情(进入计算机和风扇不工作的状态,以节省能源并让我安静地睡觉)。
问题是shutdown
必须将 调用为sudo
,否则它将无法工作。但是,当脚本完成时,密码不再位于缓存中,您需要再次输入它(当您处于睡眠状态时不太方便)。
我尝试运行path/to/script && sudo shutdown
,但也没用。它需要您上次输入密码后 15 分钟内的密码。
有没有简单的实现这一点的方法是什么?简单是指不改变系统设置等。
谢谢。
答案1
将其包装到子 shell 中:
sudo sh -c "/path/to/script; shutdown -h now"
问题是脚本也会以 root 身份运行。这可能不是问题(请考虑您的情况),但您可以通过使用sudo
again 来解决这个问题,将其分解回您的$USER
(因为我们使用双引号,所以将被替换):
sudo sh -c "sudo -u $USER /path/to/script; shutdown"
虽然有点奇怪,但应该可以工作。