# !/bin/bash
sudo -i
cd /etc/apt/sources.list.d
echo "deb http://archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse" >ia32-libs-precise.list
sudo apt-get update
sudo apt-get install ia32-libs
sudo rm /etc/apt/sources.list.d/ia32-libs-raring.list
sudo apt-get update
当我执行这个脚本时,它只是做'sudo -i'然后停止,谁可以帮助我?
答案 0 :(得分:1)
sudo
联机帮助页说:
-i, - 登录
将目标用户的密码数据库条目指定的shell作为登录shell运行 。
。
。
如果未指定任何命令,则执行交互式shell。
难怪你的脚本执行停止了。
命令
cd /etc/apt/sources.list.d
.
.
sudo apt-get update
永远不会到达,因为您刚刚生成了一个sudo -i
的新shell。
在评论中建议[ @mona_sax ],在sudo中运行脚本在安全上下文中可能不是一个好主意。目前尚不清楚您的实际意图是什么,但如果打算在后台运行脚本,则删除sudo -i
行并执行:
./script 2>&1 1>/dev/null &
答案 1 :(得分:0)
因为您没有指定以root身份运行的命令,sudo
会调用交互式shell。它会在你exit
之前终止(或被信号等杀死)。
如果您需要立即返回,可以将true
作为命令传递:
sudo true
但是,在你的情况下,考虑到你正在做的事情,它可能更好,只是将脚本限制为只有超级用户:
#!/bin/sh
set -e
# check we are running as root
if [ $(id -u) != "0" ]; then
echo "ERROR: this script must be run as a superuser" >&2
exit 1
fi
然后由用户获得适当的权限,而不是将其编码到脚本中。