./script.sh和bash script.sh之间的区别是什么

时间:2012-09-07 06:47:50

标签: linux bash

在linux系统上,以两种不同的方式对script.sh的踢法有什么不同吗?

他们完全一样吗?

由于

5 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

为了使第一个表单起作用,文件必须设置可执行位,其次需要有一个shebang来指定将使用哪个解释器。

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

有关历史课程,请参阅this

可以找到当前在linux内核中进行she-bang解析的实现here

答案 2 :(得分: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"

答案 3 :(得分:-1)

我不认为这是完全一样的。

据我了解,您只需在当前 shell上执行./script.sh的脚本。它不是你正在运行的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

答案 4 :(得分:-3)

不一定相同。

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

使用./script.sh,linux将运行位于您正在通话的目录上的脚本。