今天我按照一些说明在Linux中安装软件。有一个需要先运行的脚本。它设置了一些环境变量。
指令告诉我执行. ./setup.sh
,但执行./setup.sh
我犯了一个错误。所以env没有设定。最后我注意到了这一点并继续进行。
我想知道这两种调用脚本的方法之间的区别。我是Linux新手,所以请尽可能详细说明。
答案 0 :(得分:21)
./setup.sh
运行脚本,将启动一个运行脚本的新shell。新shell不会影响启动脚本的父shell。
. ./setup.sh
是source ./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中. foo
是source foo
的简写。
答案 3 :(得分:0)
只需运行“source /path/to/setup.sh
”
这将在当前shell中设置环境变量。