'sudo [command]' 和 'sudo sh [command] 有什么区别?

Lan*_*ndy 15 sudo

我正在尝试在我的 Ubuntu 12.04.2 LTS 中安装 VMware Workstation。如果我执行以下命令:

sudo ./VMware-Workstation-9.0.1-894247.x86_64.bundle
Run Code Online (Sandbox Code Playgroud)

它立即完成并且安装永远不会开始。

如果我执行这个命令:

sudo sh ./VMware-Workstation-9.0.1-894247.x86_64.bundle
Run Code Online (Sandbox Code Playgroud)

安装程序可以成功启动。

为什么这会有所作为?

Bru*_*ira 17

如果文件未标记为可执行文件,则需要调用命令外壳解释器来执行它。

例子:

  • sudo sh foo将打开FOOsh使用sudo的特权。

  • sudo bash foo将打开FOObash使用sudo的特权。

  • sh foo将打开FOOsh使用用户的权限。

  • bash foo将打开FOObash使用用户的权限。

如果你将一个文件标记为可执行文件,你只需要调用它,./foo并且因为它被标记为这样,它将被定义的命令 shell 解释器读取并执行,而无需定义一个。

ls -F将列出文件并用*标记可执行文件。

要在文件上启用执行位(并使其可执行),请使用命令chmod +x foo.

在您的情况下,要使您正在使用的文件可执行,您将使用该命令

chmod +x VMware-Workstation-9.0.1-894247.x86_64.bundle

然后你就可以运行它

sudo sh ./VMware-Workstation-9.0.1-894247.x86_64.bundle或只需键入sudo ./VMware-Workstation-9.0.1-894247.x86_64.bundle.


w4e*_*wet 14

Sh 是用于运行命令的 shell,因此使用 sudo 执行 sh 会为您提供一个 root shell。这意味着该 shell 中的所有命令都以 root 身份执行。我的猜测是脚本执行其他需要 root 的东西,但是当你只使用 sudo 而不是 sudo sh 时,其他东西会以普通用户身份执行,但是使用 sh 一切都将以 root 身份执行。