今天我按照一些说明在Linux上安装了一个软件。有一个脚本需要先运行。它设置了一些环境变量。
指令告诉我执行. ./setup.sh,但我错误地执行了./setup.sh。因此,未设置env。最后,我注意到了这一点,并继续进行。
我想知道这两种调用脚本的方法之间的区别。我对Linux完全陌生,所以请尽可能地详细说明。
发布于 2010-04-14 09:05:16
./setup.sh运行该脚本时,将启动一个运行该脚本的新shell。新的shell不能影响启动脚本的父shell。
. ./setup.sh是source ./setup.sh的缩写,它将在当前shell中运行脚本,而不是启动新的shell来运行它。这意味着脚本可以改变当前shell的行为,例如设置新的环境变量。
发布于 2010-04-14 09:03:02
编辑:我刚刚意识到我没有回答你问题的另一部分..但leeroy的答案是这样的。我回答了一些其他问题,但我希望它能有所帮助:-)
sh函数在您提供的脚本上运行bash。有关更多信息,请参阅the man page,但是您可以看到,sh基本上是bash的同义词
当您运行脚本时,它会根据文件顶部的内容(通常称为"Shebang" )来标识脚本
一个bash脚本应该是
#!/bin/sh或类似的方法,允许您使用dot方法。您还可以使用其他内容,如Python脚本可以具有
#!/usr/bin/env/python如果您的路径是正确的,它会将脚本作为Python脚本运行,而不是使用点符号运行bash脚本。
希望这能以简单的方式解释它!
发布于 2010-04-14 09:02:43
.是指当前目录。所以./script.sh意味着在当前目录中运行脚本。
../script.sh将在父目录中运行script.sh。
在像csh这样的shell中,. ./script.sh (点之间有空格)可能会抱怨,但在bash中,. foo是source foo的缩写。
https://stackoverflow.com/questions/2634219
复制相似问题