【问题标题】:What's the equivalent of sudo in msys?msys 中 sudo 的等价物是什么?
【发布时间】:2015-12-28 02:27:09
【问题描述】:

我正在编写一个跨平台的 shell 脚本,它应该可以在 Unix、Cygwin 和 msys 上运行。在我的 shell 脚本中,我需要以提升的权限执行操作。在 Unix 上,您可以通过 sudo 执行此操作,而在 Cygwin 上,您可以通过 cygstart --action=runas 之类的方式执行此操作。 msys 的等价物是什么?

到目前为止,我所有的谷歌搜索都只出现了this,这在 shell 脚本中是不切实际的,因为你必须与 GUI 交互。

【问题讨论】:

  • 您要运行的脚本是什么?记在心里。它不是一个 unix shell,它只是模拟一个。您可能需要以提升的权限启动 msysgit。
  • @deostroll 我尝试运行的命令是:mkdir -p、tee 和 chmod (source code for script)。
  • 这不是外壳问题。 sudo 不仅是一个外部命令,它甚至不是由 POSIX 定义的,而且在许多 Unix 或类 Unix 系统(包括许多 Linux 发行版(例如 Arch))上默认情况下肯定不可用。

标签: windows bash command-line msysgit msys


【解决方案1】:

Elevate 在这方面做得不错,尽管它并不完全等同于 sudo-equivalent。

【讨论】:

    【解决方案2】:

    我想我可能已经找到了使用 PowerShell 的解决方案:

    escape()
    {
        RESULT="$1"
        RESULT="${RESULT/\'/\\\'\'}" # replace ' with \''
        RESULT="${RESULT/\"/\\\\\\\"}" # replace " with \\\"
        echo "''$RESULT''" # PowerShell uses '' to escape '
    }
    
    sudo()
    {
        ESCAPED=()
        for ARG in "$@"
        do
            ESCAPED+=($(escape "$ARG"))
        done
    
        SHELL_PATH=$(cygpath -w $SHELL)
        PS_COMMAND="[Console]::In.ReadToEnd() | Start-Process '$SHELL_PATH' '-c -- \"${ESCAPED[*]}\"' -Verb RunAs"
        cat /dev/stdin | powershell -NoProfile -ExecutionPolicy Bypass "$PS_COMMAND"
    }
    

    肯定有点非常hackish,但总比没有好。 (或批处理文件,就此而言。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-08
      • 2014-06-12
      • 1970-01-01
      • 2022-11-28
      • 2021-06-19
      • 2012-07-20
      • 2023-03-30
      • 2011-04-08
      相关资源
      最近更新 更多