‘sudo ‘和’sudo sh 之间有什么区别?

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

sudo ./VMware-Workstation-9.0.1-894247.x86_64.bundle 

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

如果我执行此命令:

 sudo sh ./VMware-Workstation-9.0.1-894247.x86_64.bundle 

安装程序可以成功启动。

为什么这会有所不同?

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

例子:

  • sudo sh foo将使用sudo权限打开foo

  • sudo bash foo将使用sudo权限使用bash打开foo

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

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

如果将文件标记为可执行文件,则只需使用./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

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