可以sudo -i
在shell脚本中使用吗?我认为该exit
命令会遇到问题......
#!/bin/bash
sudo -i
curl -L https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
exit
答案1
已经测试过了!...查看curl命令是如何修改的...
#!/bin/bash
sudo -u root curl -L "https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo -u root chmod +x /usr/local/bin/docker-compose
exit
答案2
你不能sudo
这样使用。该脚本将为您提供一个交互式 root shell 并暂停,直到您退出该 shell。然后它将在没有特权的情况下运行脚本中的其余命令root
。
如果你的脚本仅有的执行需要root
特权的操作,然后使用以下命令运行整个脚本sudo
:
$ sudo ./myscript.sh
该脚本看起来像
#!/bin/bash
curl -L https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
(注意:我实际上并没有查看这些命令的实际用途)
否则,这只是个人意见,将root
脚本中的各个部分分开并将它们放入自己的脚本中可能是个好主意,至少如果是常见任务的话。
#!/bin/bash
# script that does things as an ordinary user
# ...
sudo "$HOME/admin_tasks/do_docker_stuff.sudo"
# rest of script
# ...
或者,您可以做其他人似乎正在做的事情,并在脚本中的每一行前面加上sudo
.在这种情况下,它会失败,因为第一行有一个需要root
特权的重定向,所以你通过使用来“修复它” sudo bash -c " ... > ... "
,将漂亮且可读的脚本变成一团混乱(再次,只是个人意见)。
想了想之后:这不是一个很长的脚本,因此sudo
在脚本中进行多次调用可能不是一个坏主意,但我们可以将调用留curl
在外部sudo
:
#!/bin/bash
curl -L -o ./docker-compose "https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-$(uname -s)-$(uname -m)"
chmod a+x ./docker-compose
sudo mv ./docker-compose /usr/local/bin/docker-compose
sudo chown root:root /usr/local/bin/docker-compose
最后三个命令可以放入do_local-bin_install.sudo
脚本中(供其他脚本重用):
#!/bin/bash
binary="$1"
chmod a+x "$binary"
chown root:root "$binary"
mv -i "$binary" /usr/local/bin/
我们可以从脚本中调用它:
#!/bin/bash
curl -L -o ./docker-compose "https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-$(uname -s)-$(uname -m)"
sudo ./do_local-bin_install.sudo ./docker-compose
抱歉,这是一种意识流类型的答案。我希望有人觉得它可以理解。