在linux系统上,以两种不同的方式对script.sh的踢法有什么不同吗?
他们完全一样吗?
由于
答案 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将运行位于您正在通话的目录上的脚本。