Cygwin 中没有“sudo”命令

Jas*_*ram 44 windows cygwin command-line

因为Cygwin 中没有sudo命令,所以我想运行的脚本失败了

./install.sh: line N: sudo: command not found
Run Code Online (Sandbox Code Playgroud)

解决这个问题的标准方法是什么?编辑脚本以删除sudo? 获得一些sudo类似 Windows 的工具?

Peo*_*eon 35

一种方法是创建一个包含以下内容的假“sudo”命令:

#!/usr/bin/bash

"$@"
Run Code Online (Sandbox Code Playgroud)

这将允许install.sh继续,因为找到了 sudo。

这不会像真正的 sudo 那样提升特权。如果您确实需要提升权限,请使用具有管理权限 (XP) 的帐户启动 cygwin shell,或者单击 cygwin.bat 并“以管理员身份运行”(Vista、Win7)

  • @Johannes:`"$@"`(双引号时)与`"$*"` 的工作方式不同:它为每个位置变量扩展为一个**单独的**单词。**示例:** 如果 `$1 == "foo bar"` 和 `$2 == "baz"`,则 `"$@"` 是 `"foo bar" baz` - 每个参数一个字(与 ` "$*"`,结果是 `"foo bar baz"` 作为一个词)。参见 `bash` 手册,_Parameters_ 部分,_Special parameters_ 小节。Peon 脚本的最终结果是它完全按照传递的参数执行它的参数。 (7认同)
  • 只是出于一个不会说流利`bash`的人的好奇:为什么这行得通?手册页没有说任何关于 `$@` 做任何类似 `sudo` 的事情。相反,它只是脚本的所有参数。在这种情况下,它周围的引号不是多余的吗?否则,如果您执行 `sudo foo bar`,那么它会尝试将 `"foo bar"` 作为单个命令执行,鉴于在类 UNIX 系统上对空格的非理性恐惧,该命令可能不存在。 (5认同)
  • @Johannes:在 Unix 中,真正的 `sudo` 会在运行命令之前将权限从凡人提升到 `root`。在 Cygwin 中,没有这样的东西,所以 Peon 的假脚本(你应该命名为 `sudo`)只是直接运行命令而不改变它的权限。(这意味着您可能需要以管理员身份运行 `./install.sh`。) (2认同)
  • @grawity:`runas` 应该可以工作,它不依赖于 UAC 并自行提示输入密码。我只是很困惑为什么答案中的脚本显然没有按照我认为是目标的名称所暗示的那样做。对不起我的愚蠢;-) (2认同)

dot*_*hen 25

在 cygwin 邮件列表中找到了答案。要command在 Cygwin 中以提升的权限运行,请在命令之前添加cygstart --action=runas如下内容:

$ cygstart --action=runas command
Run Code Online (Sandbox Code Playgroud)

这将打开一个要求输入管理员密码的 Windows 对话框,如果输入了正确的密码,则运行该命令。

只要~/bin在您的路径中,这很容易编写脚本:

$ cat ~/bin/sudo
#!/usr/bin/bash
cygstart --action=runas "$@"

$ PATH=$HOME/bin:$PATH
$ chmod +x ~/bin/sudo
$ sudo elevatedCommand
Run Code Online (Sandbox Code Playgroud)

在 64 位 Windows 8 上测试。

  • `cygstart` 方法的问题在于它只适用于 Windows 命令/程序。你不能做`sudo ls`。CygWin 的 SUDO 很简洁,但仍然缺少一些好的 `sudo` 命令。 (5认同)
  • 哦,不,@Dotancohen,这只是一个例子。您可以对 CygWin 使用 `sudo` 来运行任何 Windows 或 CygWin 命令。这对我来说是非常有用的。但我发现更实用的方法是我开发的 CygWin SUDO 脚本包装器:http://superuser.com/questions/741345/practical-closest-to-the-classical-linux-one-way-to-use -automate-sudo-for-cy(仍处于测试阶段,但似乎有效)。有了它,您可以轻松地订购诸如“sudo net start vncserver”之类的东西。 (3认同)

Sop*_*rez 10

我为CygWinSUDO编写了(相当简单的)TOUACExt,这是一个 pre-beta shell 脚本自动化,它接近Linux的经典行为 sudo

  • 需要时自动打开和关闭sudoserver.py。
  • 请求UAC提升提示。

安装需要将四个.sh脚本复制到某个路径目录、创建别名以及线程中详述的几个步骤。

结果:您键入一个sudo YourCommand并获得它的输出,而不必担心该过程的其余部分。


tho*_*i56 5

基于dotancohen 的回答,我使用了别名:

alias sudo="cygstart --action=runas"
Run Code Online (Sandbox Code Playgroud)

作为外部程序的魅力所在(但不是 shell 内置程序):

sudo chown User:Group <file>
Run Code Online (Sandbox Code Playgroud)