我正在编写一个跨平台的shell脚本,它应该适用于Unix,Cygwin和msys。在我的shell脚本中,我需要使用提升的权限执行操作。在Unix上,您可以通过sudo
和Cygwin通过类似cygstart --action=runas
的方式执行此操作。什么是msys的等价物?
到目前为止,我所有的Google搜索仅显示this,因为您必须与GUI进行交互,因此从shell脚本开始并不实用。
答案 0 :(得分:2)
Elevate在这方面做得不错,虽然它不完全sudo
- 相当于。
答案 1 :(得分:1)
我想我可能已经找到了使用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,但它总比没有好。 (或批处理文件,就此而言。)