msys中的sudo相当于什么?

What's the equivalent of sudo in msys?

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

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

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

escape()
{
    RESULT=""
    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"
}

确实有点 非常骇人听闻,但总比没有好。 (或批处理文件,就此而言。)

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