2

在linux系统上,这两种不同的方式踢script.sh有什么区别吗?

它们完全一样吗?

谢谢

4

5 回答 5

7

./script.sh 期望此文件位于当前目录中,已设置执行位,并且文件的第一行是解释器开始的路径(Shebang 行)

bash script.sh 意味着您调用 bash 并将要执行(解释)的文件内容作为 bash 命令传递。这样你的文件就不需要是可执行的并且有一个 shebang 行。

如果满足 ./script.sh 的条件,则两次调用都会导致相同的结果。

于 2012-09-07T06:52:01.783 回答
1

为了使第一种形式工作,文件必须设置可执行位,其次它需要有一个shebang,它指定将使用哪个解释器。

所以是的,两种形式都是相同的(当涉及到将被解释的内容时)。

有关历史课,请参阅

可以在此处找到 linux-kernel 中 she-bang 解析的当前实现

于 2012-09-07T06:52:39.913 回答
0

我不认为这完全一样。

据我了解,您只需./script.sh当前shell 上执行一个脚本。它不必是您正在运行的 bash (Bourne Again SHell),它可以是您系统上安装的任何 shell。

如果使用 执行脚本bash script.sh,则告诉系统您希望使用 bash shell 显式执行脚本。

您可以通过调用以下命令查看哪些 shell 可用于您的系统:

$ cat /etc/shells 
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
于 2012-09-07T06:55:02.630 回答
0

script.sh 可以称为 script.anything,如欺负中的 knittl 帖子上指出的那样,脚本由

#!/whatever/it/is

运行 bash ./script.something 意味着您告诉它使用 bash 执行脚本,这可能会返回错误而不是运行也欺负忘记

#!/usr/bin/perl

所以你可以有一个名为 script.sh 的 perl 脚本

 cat perl.sh 
#!/usr/bin/perl

print "Hello World\n";
:~/Documents$ ./perl.sh 
Hello World

~/Documents$ bash ./perl.sh 
Warning: unknown mime-type for "Hello World\n" -- using "application/octet-stream"
Error: no such file "Hello World\n"
于 2012-09-07T10:43:17.467 回答
-2

不一定相同。

如果您运行 script.sh linux 将搜索 $PATH 环境变量中设置的目录。

使用 ./script.sh,linux 将运行位于调用时您所在目录的脚本。

于 2012-09-07T06:52:41.380 回答