Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 什么';这是./script.sh和bash script.sh之间的区别_Linux_Bash - Fatal编程技术网

Linux 什么';这是./script.sh和bash script.sh之间的区别

Linux 什么';这是./script.sh和bash script.sh之间的区别,linux,bash,Linux,Bash,在linux系统上,在这两种不同的方式中使用script.sh有什么不同吗 它们完全一样吗 谢谢/script.sh希望此文件位于当前目录中,已设置执行位,文件的第一行是要开始的解释器路径(Shebang行) sh表示调用bash并将要执行(解释)的文件内容作为bash命令传递。这样,您的文件就不需要是可执行的,并且具有shebang行 如果满足./script.sh的条件,则两个调用都会导致相同的结果。为了使第一个表单工作,文件必须设置可执行位,其次,它需要有一个指定将使用哪个解释器的解释器

在linux系统上,在这两种不同的方式中使用script.sh有什么不同吗

它们完全一样吗


谢谢

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

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


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

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

因此,是的,两种形式是相同的(当涉及到将被解释的内容时)

有关历史课程,请参见


linux内核中she-bang解析的当前实现不一定相同

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


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

我认为这不完全相同

据我所知,您只需在当前shell上执行带有
/script.sh
的脚本。你运行的不是bash(bourneshell),它可以是安装在你系统上的任何SHell

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

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

$ cat /etc/shells 
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

script.sh可以称为script.sh。bully内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"

我是bash nubie,但我所知道的一个区别是,环境变量在执行脚本时具有局部作用域,但对脚本进行寻源会向父级添加任何定义scope@DeepYellow:当发出命令
source script.sh
时,将生成脚本。script.sh
@DeepYellow:是的,但问题与脚本的来源无关。因此,你的评论有点令人困惑和误导。@knittl你说得对!我看错了,谢谢你指出。在大多数环境中,shebang不是强制性的(默认情况下假定为sh)
/script。sh
启动一个新的子shell,即脚本不在当前shell中运行。实际的子壳由shebang(
#!
)行确定。如果文件中不包含shebang行,默认值似乎是
sh
,虽然这是正确的,但它并不能真正回答OPs问题。当他们单独使用文件名时,他们没有问会发生什么。嗯,你是对的,我误解了这个问题。谢谢你的澄清