我试图在我的Ubuntu12.04.2LTS中安装VMware工作站。如果我执行以下命令:
sudo ./VMware-Workstation-9.0.1-894247.x86_64.bundle
它立即完成,安装从未启动。
如果我执行以下命令:
sudo sh ./VMware-Workstation-9.0.1-894247.x86_64.bundle
安装程序可以成功启动。
为什么这会有什么区别?
发布于 2013-04-11 10:24:46
如果该文件未标记为可执行文件,则需要调用命令shell解释器来执行该文件。
示例:
sudo sh foo
将使用sudo特权使用sh
打开foo。sudo bash foo
将使用sudo特权使用bash
打开foo。sh foo
将使用您的用户权限使用sh
打开foo。bash foo
将使用您的用户权限使用bash
打开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
。
发布于 2013-04-11 08:44:55
Sh是一个用于运行命令的shell,因此使用sudo执行sh将为您提供一个根shell。这意味着shell中的所有命令都作为root执行。我的猜测是,脚本执行其他需要根的东西,但是,当您只使用sudo不sudo sh时,其他的东西会以普通用户的身份执行,但是对于sh,所有的东西都会以root的形式执行。
发布于 2021-05-17 12:56:44
sudo
是一个授予根权限的命令。但是sh
是一个解释器。当您使用sudo command
时,您将该命令作为根权限运行。但是,当您使用sudo sh command
时,您将sh
命令作为根用户运行。
https://askubuntu.com/questions/280208
复制相似问题