“./somescript.sh”和“./somescript.sh”之间的区别是什么?

时间:2010-04-14 00:58:13

标签: linux shell

今天我按照一些说明在Linux中安装软件。有一个需要先运行的脚本。它设置了一些环境变量。

指令告诉我执行. ./setup.sh,但执行./setup.sh我犯了一个错误。所以env没有设定。最后我注意到了这一点并继续进行。

我想知道这两种调用脚本的方法之间的区别。我是Linux新手,所以请尽可能详细说明。

4 个答案:

答案 0 :(得分:21)

./setup.sh运行脚本,将启动一个运行脚本的新shell。新shell不会影响启动脚本的父shell。

. ./setup.shsource ./setup.sh的简写,它将在当前shell中运行脚本,而不是启动新shell来运行它。这意味着脚本可以改变当前shell的行为,例如设置新的环境变量。

答案 1 :(得分:3)

编辑:我刚刚意识到我没有回答你问题的其他部分..但是leeroy的答案就是这样。我有点回答别的问题,但我希望它有所帮助: - )

sh函数在您呈现的脚本上运行bash。有关详细信息,请参阅the man page,但您可以看到sh基本上是bash的同义词

当您运行脚本ala ./setup.sh时,它会根据文件顶部的内容识别脚本,通常称为"Shebang"

bash脚本会有

#!/bin/sh

或者在文件顶部类似,允许您使用点方法。你也可以使用其他东西,比如Python脚本可以有

#!/usr/bin/env/python

如果您的路径是正确的,它将使用点表示法将脚本作为Python脚本而不是bash脚本运行。

希望以简单的方式解释它!

答案 2 :(得分:0)

.指的是当前目录。所以./script.sh表示在当前目录中运行脚本。

../script.sh将在父目录中运行script.sh。

. ./script.sh(点之间有空格)会在某些shell中投诉,比如csh,但在bash中. foosource foo的简写。

答案 3 :(得分:0)

只需运行“source /path/to/setup.sh

这将在当前shell中设置环境变量。