不同的运行shell脚本方式有什么区别?

3
最近有人问了我一个问题,如何执行shell脚本以及每种方法的区别是什么?
我说我们可以通过以下几种方法来运行shell脚本,假设test.sh是脚本名称:
  1. sh test.sh
  2. ./test.sh
  3. . ./test.sh
我不知道1和2之间的区别。但通常情况下,在前两种方法中,执行时会生成新的进程并运行相同的内容。而在最后一种方法中,它不会生成新的进程,而是在同一个进程中运行。
请问是否有人能够更深入地解释这个问题,并纠正我如果我错了?

使用"./script.sh"与". ./script.sh"启动脚本的区别 - devnull
“./somescript.sh”和“. ./somescript.sh”的区别是什么? - devnull
运行shell脚本时,使用"./script.sh"和"sh script.sh"有什么区别? - devnull
1个回答

11
sh test.sh

告诉命令使用sh来执行test.sh

./test.sh

告诉命令执行脚本。解释器需要在第一行定义,例如 #!/bin/sh#!/bin/bash。注意 (感谢keltar),在这种情况下,文件test.sh需要对执行此命令的用户开放执行权限,否则不会执行。

无论哪种情况,所有使用的变量都将在脚本执行后失效。

. ./test.sh

源代码。即执行它,无论执行了什么、定义了哪些变量等,都将在会话中持续存在。

如需进一步了解,请查看执行bash脚本和source bash脚本之间的区别是什么?非常好的答案:

区别如下:

  • 当您执行脚本时,您正在打开一个 shell,在新 shell 中键入命令,将输出复制回当前 shell,然后关闭新 shell。对环境的任何更改将仅在新 shell 中生效,并且在关闭新 shell 后将丢失。

  • 当您source脚本时,您正在在您的当前 shell 中键入命令。对环境的任何更改都将生效并保留在您的当前 shell 中。


感谢您的迅速回复。感谢您澄清每个方法。 - Prabu
只是一个快速的说明 - 对于第二个选项,您必须拥有文件系统权限才能执行此文件。对于其他选项,这并非强制要求。 - keltar
@keltar 你说得完全正确。已经相应地进行了更新。谢谢! - fedorqui

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接