Jam*_* Ko 5 windows bash command-line msys msysgit
我正在编写一个跨平台 shell 脚本,应该可以在 Unix、Cygwin 和 msys 上运行。在我的 shell 脚本中,我需要使用提升的权限执行操作。在 Unix 上,您可以通过以下方式执行此操作sudo,在Cygwin上,您可以通过类似的方式执行此操作cygstart --action=runas。msys 的等效项是什么?
到目前为止,我所有的谷歌搜索都只找到了this,这对于 shell 脚本来说是不切实际的,因为你必须与 GUI 交互。
我想我可能已经找到了使用 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"
}
Run Code Online (Sandbox Code Playgroud)
绝对有点极端黑客,但总比没有好。(或批处理文件,就此而言。)