2015-03-02 128 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