在linux系统上,这两种不同的方式踢script.sh有什么区别吗?
它们完全一样吗?
谢谢
./script.sh 期望此文件位于当前目录中,已设置执行位,并且文件的第一行是解释器开始的路径(Shebang 行)
bash script.sh 意味着您调用 bash 并将要执行(解释)的文件内容作为 bash 命令传递。这样你的文件就不需要是可执行的并且有一个 shebang 行。
如果满足 ./script.sh 的条件,则两次调用都会导致相同的结果。
我不认为这完全一样。
据我了解,您只需./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
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"
不一定相同。
如果您运行 script.sh linux 将搜索 $PATH 环境变量中设置的目录。
使用 ./script.sh,linux 将运行位于调用时您所在目录的脚本。