有时我发现很少有脚本是通过“sh”命令执行的,有时是通过“./”命令执行的。我无法理解它们之间的确切区别。请帮助我。
sh file
在新的 shell 进程中执行 shell 脚本文件。
. file
在当前 shell 进程中执行 shell 脚本文件。
./file
将执行当前目录中的文件。该文件可以是二进制可执行文件,也可以以 hashbang 行开头(文件的第一行形式为#!....
, 例如#!/usr/bin/ruby
在文件中表示脚本需要作为 Ruby 文件执行)。该文件需要设置可执行标志。
例如,如果您有脚本test.sh
:
#!/bin/sh
TEST=present
然后你执行它sh test.sh
,你会启动一个新的sh
(更确切地说bash
,最有可能的是,因为在现代系统中一个是软链接到另一个的),然后在其中定义一个新变量,然后退出。随后的echo $TEST
打印空行 - 变量未在外壳中设置。
如果您使用启动它. test.sh
,您将使用当前 shell 执行脚本。的结果echo $TEST
会打印present
.
如果您使用启动它./test.sh
,第一行#!/bin/sh
会被检测到,那么它就像你写的一样/bin/sh ./test.sh
,在这种情况下可以归结为第一种情况。但如果 hashbang 行是,例如,#!/usr/bin/perl -w
,该文件将被执行/usr/bin/perl -w ./test.sh
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)