运行shell脚本的不同方式之间的差异

最近我被问了一个问题。 执行shell脚本有哪些不同的方法,每种方法有什么区别?

我说我们可以在下面的方法中运行shell脚本,假设test.sh是脚本名称,

  1. sh test.sh
  2. ./test.sh
  3. 。 ./test.sh

我不知道1和2之间的区别。但是通常在前2种方法中,执行时会产生新的进程并运行相同的进程。 而在最后的方法,它不会产生新的进程。 相反,它运行在同一个。

如果我错了,有人可以更多地了解这一点,纠正我吗?

Solutions Collecting From Web of "运行shell脚本的不同方式之间的差异"

sh test.sh 

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

 ./test.sh 

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

在这两种情况下,所有使用的变量将在脚本执行后过期。

 . ./test.sh 

来源代码。 也就是说,它执行它,不管执行什么,定义的变量等等,都会在会话中持续存在。

有关更多信息,您可以检查执行bash脚本和获取bash脚本之间的区别是什么? 很好的答案:

差异是:

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

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