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

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

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

我想知道这两种调用脚本方法的区别。 我对Linux是全新的,所以请尽可能详尽。

Solutions Collecting From Web of "“./somescript.sh”和“”之间的区别是什么? ./somescript.sh”"

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

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

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

sh函数在你提供的脚本上运行bash。 请参阅手册页获取更多信息,但是您可以看到sh基本上是bash的同义词

当你运行脚本ala ./setup.sh它会根据文件顶部的内容标识脚本,通常称为“Shebang”

一个bash脚本会有

 #!/bin/sh 

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

 #!/usr/bin/env/python 

如果你的路径是正确的,它将运行脚本作为Python脚本而不是使用点符号的bash脚本。

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

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

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

. 指的是当前目录。 所以./script.sh意味着在当前目录下运行脚本。

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

. ./script.sh . ./script.sh (在点之间有一个空格)会在像csh这样的shell中抱怨,但是在bash中. foo . foosource foo简写。