gpt4 book ai didi

shell - UNIX 中 "./"和 "sh"之间的区别

转载 作者:行者123 更新时间:2023-12-03 12:05:19 25 4
gpt4 key购买 nike

有时我看到很少有脚本是通过“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 ,很可能,因为在现代系统中一个软链接(soft link)到另一个),然后在其中定义一个新变量,然后退出。随后的 echo $TEST打印一个空行 - 变量未设置在 shell 中。

如果您使用 . 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 执行.

关于shell - UNIX 中 "./"和 "sh"之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22087378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com