AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 962655
Accepted
LinuxFerLife
LinuxFerLife
Asked: 2017-10-07 13:28:36 +0800 CST2017-10-07 13:28:36 +0800 CST 2017-10-07 13:28:36 +0800 CST

在 Bash 脚本中暂停 SUDO?[复制]

  • 772
这个问题在这里已经有了答案:
如何在不要求输入密码的情况下在脚本中 sudo 执行命令? (5 个回答)
如何在脚本中运行“sudo”命令? (7 个回答)
4年前关闭。

我有使用 sudo 命令的 bash-script,但在中间我需要停止 sudo-influence 然后再恢复它。

使用伪代码的非常简单的版本

sudo apt-get install -y synaptic
sudo ...
// I need to suspend sudo here, otherwise the folder 
// is created with root as the owner.
mkdir ~/mystuff
// then reinstate it here
sudo apt-get install -y ssllib

sudo 是否在开始运行 bash 脚本时立即请求密码 - 或者 - 它只在遇到第一个“sudo”行时询问?

如果是这样,那么我想我可以将所有非 sudo 的东西移到顶部。但是,问题是我必须等到遇到第一个“sudo”行才能输入密码。

command-line
  • 2 2 个回答
  • 1057 Views

2 个回答

  • Voted
  1. Best Answer
    dessert
    2017-10-07T13:33:44+08:002017-10-07T13:33:44+08:00

    sudo为此提供了选项-u,请参阅man sudo:

    -u user, --user=user
     Run the command as a user other than the default target user (usually root).
     The user may be either a user name or a numeric user ID(UID) prefixed
     with the ‘#’ character (e.g.  #0 for UID 0).  When running commands as a UID,
     many shells require that the ‘#’ beescaped with a backslash (‘\’).
     Some security policies may restrict UIDs to those listed in the password
     database. The sudoers policyallows UIDs that are not in the password database
     as long as the targetpw option is not set. Other security policies may
     not support  this.
    

    对于您的示例,这将是:

    sudo -u USERNAME mkdir /home/USERNAME/mystuff
    
    • 2
  2. muru
    2017-10-07T13:41:48+08:002017-10-07T13:41:48+08:00

    鉴于您当前的脚本,不,该mkdir命令不会与sudo. sudo不会神奇地开始影响它没有启动的命令。它也不会在运行之前神奇地询问密码。

    可能发生的情况是您可能已经使用sudo. 如果是这种情况,那么您可以检查这是否属实,并要求用户在没有以下情况下运行它sudo:

    if [ -n "$SUDO_COMMAND" ]
    then
        echo "Please don't run this script with sudo."
        exit
    fi
    

    或者,切换到这些命令的实际用户:

    if [ -n "$SUDO_USER" ]
    then
        sudo -iu "$SUDO_USER" sh -c 'mkdir ~/mystuff'
    fi
    

    您可能需要sh -c因为~由运行脚本的 shell 扩展,并且根据sudo设置,该 shell 可能认为主目录是 root 的。

    • 2

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve