我正在编写一个跨平台 shell 脚本,应该可以在 Unix、Cygwin 和 msys 上运行。在我的 shell 脚本中,我需要使用提升的权限执行操作。在 Unix 上,您可以通过
sudo
来完成此操作,在 Cygwin 上,可以通过 cygstart --action=runas
之类的东西来完成此操作。 msys 相当于什么?
到目前为止我所有的谷歌搜索都只出现了this,这对于 shell 脚本来说是不切实际的,因为你必须与 GUI 交互。
Elevate 在这方面做得不错,尽管它并不完全
sudo
等效。
我想我可能已经找到了使用 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,但总比没有好。 (或批处理文件,就此而言。)
您可能想看看该项目自己的解决方案: https://www.msys2.org/wiki/Sudo/