使用以下脚本运行有什么实际区别吗?
[sudo] sh ./<script>.run
代替
[sudo] chmod +x ./<script>.run
[sudo] ./<script>.run
答案1
如果你使用
sh ./<script>.run
/bin/sh
(通常是 Bourne shell)将用于运行脚本。当然,这只有在脚本是为 Bourne shell 编写时才有效。有时 Linux 的 shell 脚本需要 Bash 而不是 Bourne shell,因此即使它是 shell 脚本,这也可能无法工作。
如果你使用
./<script>.run
内核查看舍邦线找出要使用哪个程序来运行该程序。因此,即使它是 Bash、Perl、Python 或其他脚本,这种方法也能奏效。
因此这通常是运行脚本的首选方式。
答案2
只要它是一个sh
(Dash,或同等的)shell 脚本,就没有外表上的区别。
问题是,.run
并不能保证情况确实如此。它可能是二进制文件。它可能是 Bash 或 Python 或 PHP 或任何其他文件;它们都有一个 shell 脚本 hash-bang。如果你盲目地强行执行sh
,谁知道会发生什么。它可能会出错,但它可能会在到达那一步之前意外运行有害代码。
通过chmod
对其进行 ding(启用执行权限位)然后运行它./script.run
,您可以为其提供最佳的运行可能性。如果它是一个 shell 脚本,它的 hash-bang 将被正确解析,如果它是一个二进制可执行文件,它将直接运行。
答案3
这两种方法通常可以起到相同的作用但却有很大的不同。
sh ./script
sh
使用参数运行命令./script
,该命令恰好执行给定的脚本,即使该脚本实际上不是脚本sh
(不好)
./script
执行给定的文件。它通过查找“她帮”行来确定要运行什么命令。如果未指定,则使用sh
(这两种方法有时作用相同),但通常会指定不同的解释器。
例如,如果filename
包含以下内容:
#!/usr/bin/python
print "This is a Python script!"
..那么这两个命令就有很大不同:
$ sh script
script: line 3: print: command not found
$ chmod +x script
$ ./script
This is a Python script!
如果没有 shebang 行,则两者相同:
$ cat script
echo "This is an sh script"
$ sh ./script
This is an sh script
$ ./script
This is an sh script
答案4
不
[sudo] chmod +x ./<scrupt>.run
使脚本可执行,以便您可以使用 运行它./<script>.run
。
即使[sudo] sh ./<script>.run
它不可执行,您也可以使用 运行它。