最近我被问到一个问题。执行shell脚本的不同方法有哪些?每种方法有什么区别?
我说我们可以在以下方法中运行shell脚本,假设test.sh是脚本名称,
我不知道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中。