2015-03-02 60 views
1

我想了解下面几行kshell脚本。任何人都可以解释为什么我们需要第三行中的点和空格吗?kshell UNIX的基本目录

#!/bin/ksh 
export scriptDir=${0%/*} 
. $scriptDir/version.profile 
echo "JAVA_HOME_FOR_THIS_SCRIPT=$JAVA_HOME" 

回答

2

.的命令,其也可以写成source,是一种内置于KSH和其他SH衍生的壳命令。在这种情况下,它在当前shell进程的上下文中执行$scriptDir/version.profile中包含的命令。

引述KSH手册页:

. name [ arg ... ]
如果function保留字 语法,功能在当前的环境中执行定义的函数(如如果 已用名称()语法定义)。否则 如果名称引用一个文件,该文件是完整读取的,并且该命令在当前shell的环境中执行 环境。由PATH指定的搜索路径用于查找包含该文件的 目录 。如果给出了任何参数arg,则它们在处理时变成位置参数。命令 并且原始位置参数在完成时被恢复。否则,位置参数不变。退出状态是执行的最后一个命令 的退出状态。

+0

非常感谢。虽然我知道export scriptDir = $ {0%/ *}基本上给出了当前目录,但是有可能解释脚本的行吗? – 2015-03-02 21:40:15

+0

你的问题是关于'.'命令的。至于'$ {0%/ *}',我认为它给了你脚本所在的目录,而不是当前目录。 '$ 0'是命令名,我认为'%/ *'语法剥离了尾随组件 - 所以如果脚本是'/ home/username/bin/fred',它会剥去'/ fred',只留下目录名称。 ksh手册应该解释它。 – 2015-03-02 21:43:19