我已经下载了weblogic服务器的安装包,在README中,有这样的命令需要执行:
Linux/Mac
$ . ./configure.sh
这不是我第一次看到这种情况。为什么命令开头有一个额外的点?当我只这样做时./configure.sh
,结果是一样的
答案1
点 ( .
) 是从文件执行命令的符号,它作为点的参数给出。例如,该文件的内容./configure.sh
在当前 shell 中执行。点命令起源于 Bourne shell,并且在其他 shell 中也可用,例如在 Bash 中。
摘自 Bash 的手册页
. filename [arguments]
source filename [arguments]
Read and execute commands from filename in the current shell
environment and return the exit status of the last command executed from
filename. If filename does not contain a slash, file names in PATH are used
to find the directory containing filename. The file searched for in PATH
need not be executable. When bash is not in posix mode, the current directory
is searched if no file is found in PATH. If the sourcepath option to the
shopt builtin command is turned off, the PATH is not searched. If any
arguments are supplied, they become the posi‐ tional parameters when filename
is executed. Otherwise the positional parameters are unchanged. The return
status is the status of the last command exited within the script (0 if no
commands are executed), and false if filename is not found or cannot be read.
笔记:其他 shell 例如csh
具有类似的 command source
,并且许多更现代的版本都支持点表示法和命令source
。 Bash 实际上两者都支持。
例子
下面是一个示例,我们将$SOMEVAR
通过获取定义了该变量的文件来在当前 shell 中设置该变量。
这是示例文件:
$ cat test.sh
SOMEVAR="hi"
首先,我们检查以确保$SOMEVAR
当前 shell 中尚未设置该变量。
$ echo $SOMEVAR
$
现在我们获取它,并确认它现在已设置:
$ . ./test.sh
$ echo $SOMEVAR
hi
可移植性
感谢@ChrisDown 提到这一点。点 ( .
) 被指定为 POSIX 的一部分,因此是可移植的,而命令则source
不然。请参阅此处The Open Group 基本规范第 7 期文档,部分:“2. Shell 命令语言”。具体来说就是这一段。
摘抄
姓名
点 - 在当前环境中执行命令
概要
。文件
描述
shell 应在当前环境中执行文件中的命令。
如果文件不包含 ,shell 将使用 PATH 指定的搜索路径来查找包含文件的目录。然而,与普通命令搜索不同的是,点实用程序搜索的文件不需要是可执行的。如果没有找到可读文件,非交互式 shell 将中止;交互式 shell 应将诊断消息写入标准错误,但这种情况不应被视为语法错误。