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
。
我正在编写一个跨平台 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
。