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

时间:2013-08-20 09:45:10

标签: linux unix

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

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

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

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

1 个答案:

答案 0 :(得分:8)

sh test.sh

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

./test.sh

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

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

. ./test.sh

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

有关详细信息,您可以查看What is the difference between executing a bash script and sourcing a bash script?非常好的答案:

  

区别在于:

     
      
  • 当你执行脚本时,你打开一个 new shell,输入   新shell中的命令将输出复制回当前   shell,然后关闭新shell。任何环境变化都需要   只在新shell中有效,并且在新shell出现后将丢失   闭合。

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

  •