运行shell脚本的不同方式之间的区别

Pra*_*abu 1 unix linux

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

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

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

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

如果我错了,有人可以对此提出更多见解并纠正我吗?

fed*_*qui 8

sh test.sh
Run Code Online (Sandbox Code Playgroud)

告诉sh用于执行的命令test.sh.

./test.sh
Run Code Online (Sandbox Code Playgroud)

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

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

. ./test.sh
Run Code Online (Sandbox Code Playgroud)

来源代码.也就是说,它执行它,执行的任何内容,定义的变量等都将在会话中持续存在.

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

不同之处是:

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

  • 当你采购你在你键入的命令脚本 目前的外壳.对环境的任何更改都将生效并保留在当前shell中.