windows msys中sudo的等价物是什么?

dgenwo3n  于 2023-10-22  发布在  Windows
关注(0)|答案(3)|浏览(122)

我正在写一个跨平台的shell脚本,它应该可以在Unix、Cygwin和msys上工作。在我的shell脚本中,我需要使用提升的权限执行操作。在Unix上,你可以通过sudo来实现,在Cygwin上可以通过类似cygstart --action=runas的东西来实现。msys的等价物是什么?
到目前为止,我所有的谷歌搜索都只找到了this,这在shell脚本中是不实用的,因为你必须与GUI交互。

dxxyhpgq

dxxyhpgq1#

Elevate在这方面做得很好,尽管它不完全等同于sudo

pw9qyyiw

pw9qyyiw2#

我想我可能已经找到了一个使用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"
}

绝对有点极端黑客,但总比没有好。(或批处理文件,就此而言。)

wj8zmpe1

wj8zmpe13#

https://www.msys2.org/wiki/Sudo/开始,如果您没有使MSYS 2根目录对用户只读,并且不想从MSYS 2执行任何Windows管理任务,则不需要sudo。但是如果你确实需要sudo,MSYS 2维护者的建议是使用一个替代品(MSYS 2不支持GNU/Linux sudo需要的所有东西)。他们建议一个没有“* 可怕的安全缺陷 *”的替代品是win-sudo。它并不支持GNU/Linux系统上sudo的所有参数,但它确实适用于执行sudo foo以提升的权限运行foo的最简单情况。

相关问题