2013-05-16 58 views
0

我會很高興,如果有人能解釋我是什麼這部分代碼確實如何理解下面的shell腳本?

[ -n "${0%/*}" ] && cd ${0%/*} 
. ./environment.sh 
. ./readParams.sh 

據我所知,這個腳本是從./enviroment.sh./readparams.sh

讀書,但我真的努力理解什麼第一代碼行。因此,我可以理解這之後的整個過程。

如果你能給我一個網站或任何能夠幫助我理解這種語法的東西,我會很高興。我是一個shell腳本的初學者,所以任何幫助表示讚賞。

+1

同一個目錄中你有沒有忘記Python? – jamylak

+3

這不是Python代碼。 –

+0

也許我錯了,是一個shell腳本,但問題依然存在。如果您有任何有關我應該在何處理解該語法的信息,請參閱我的理解。請諒解 – stratis

回答

5

這是一個shell腳本,而不是python。

[ -n "${0%/*}" ] && cd ${0%/*} 

將當前工作目錄更改爲shell腳本所在的目錄。

. ./environment.sh 
. ./readParams.sh 

這源於兩個列出的shell腳本,可能存儲在與被調用腳本相同的目錄中。

要打破第一行,$0將包含命令的第一個參數,即被調用的腳本。 ${0%/*}執行parameter substitution刪除尾部(從最後的/開始),這樣可以有效地爲您提供目錄名稱。

[ -n "${0%/*}" ]翻譯爲「如果"${0%/*}"導致非空字符串」。

因此,整行將轉換爲「如果執行的腳本的前綴是路徑,那麼該目錄爲cd」。

p.s.我不相信這是實現這一目標的最佳方式,但這就是它所做的。就個人而言,我會選擇更易讀的cd $(dirname "$0"),或者更強大的解決方案,請參閱Getting the source directory of a Bash script from within

+0

非常感謝!所以我認爲我正在閱讀整天Python的原因,我找不到任何會讓我理解它的東西。 – stratis

+0

非常歡迎。很高興我能幫上忙。 –

1

首先,這根本就不是python,甚至不是關閉!

[ -n "${0%/*}" ] && cd ${0%/*} 

它使用參數擴展,你可以用bash來查看它。

基本上,它到您的腳本所在的目錄。例如:

,如果你的腳本是:

/foo/bar/baz/xxx.sh 

上述行確實cd /foo/bar/baz

文件:

environment.sh 
readParams.sh 

是在xxx.sh

+0

非常感謝您的幫助! – stratis