2014-10-28 56 views
0

我有一個project/bin/不包含在PATH中的目錄。它包含 二進制文件project/bin/oneproject/bin/two在bash腳本中包含來自相對路徑的二進制文件

bash腳本位於project/shell/script1/run.sh。現在,我想使用project/shell/script1/run.sh腳本中的project/bin文件夾中的二進制文件。我想要一個全局腳本,可以是source d,並自動包含這些二進制文件。

所以,我創建了一個腳本project/bin/load_bin

#!/usr/bin/env bash 

$local_bin_one='./one' 
$local_bin_two='./two' 

在我project/shell/script1/run.sh我執行腳本:

#!/usr/bin/env bash 

source '../../bin/load_bin' 

但是,當我嘗試使用$local_bin_one,我得到錯誤未找到文件。這是因爲$local_bin_one指向./one而不是../../bin/one

問題:如何從project/bin/load_bin腳本本身找到正在調用source '../../bin/load_bin'的腳本的路徑?

回答

0

你可以得到一個bash腳本的路徑是這樣的:

${0%/*} 

也就是說,採取$0argv[0],完整的路徑和文件名的腳本與調用),並去掉最後一個斜線和那之後是什麼(相當於$(dirname "$0"))。

然後你可以這樣做:

mydir=${0%/*} 
source "$mydir/../../bin/load_bin" 

或者你甚至可以這樣做:

cd ${0%/*} 
source '../../bin/load_bin' 
+1

謝謝。但是我的問題是,我不知道'load_bin'腳本中,「source」$ mydir /../../ bin/load_bin「'的調用者是誰。如果我執行'dirname',它只會顯示'.',因爲源代碼會將代碼粘貼到調用腳本中。 – Kiril 2014-10-28 12:16:35

+1

在這種情況下,我認爲你應該在給它一個環境變量之前設置一個很好理解的「根」,比如'load_bin'所在的目錄。 – 2014-10-28 13:16:40

相關問題