2016-08-16 122 views
15

我在同一個文件夾(由用戶的地方保存誰下載整個倉庫)兩大Bash腳本:運行在同一個目錄中的腳本作爲當前腳本

  • script.sh被用戶運行
  • helper.sh需要和script.sh

運行這兩個腳本應該是在同一目錄下。我需要的第一個腳本調用第二個,但有兩個問題:

  1. 知道當前的工作目錄是沒用的,我的,因爲我不知道用戶是如何執行的第一個腳本做(可能是與/usr/bin/script.sh,與./script.sh,或它可能與../Downloads/repo/scr/script.sh
  2. 在調用helper.sh之前,腳本script.sh將更改爲不同的目錄。

我可以肯定地砍擊在一起,通過在變量存儲the current directory做到這一點,但代碼似乎爲我想象是一種很常見和簡單的任務不必要的複雜。

是否有一個標準的方式來可靠請致電helper.shscript.sh?並將在任何Bash支持的操作系統中工作?

回答

22

由於$0認爲是運行腳本的完整路徑,可以使用dirname反對它拿到腳本的路徑:

#!/bin/bash 

script_name=$0 
script_full_path=$(dirname "$0") 

echo "script_name: $script_name" 
echo "full path: $script_full_path" 

因此,如果您例如將其存儲在/tmp/a.sh,那麼你將看等的輸出:

$ /tmp/a.sh 
script_name: /tmp/a.sh 
full path: /tmp 

所以

  1. 瞭解當前的工作目錄是沒用的,我的,因爲我不知道用戶是如何執行的第一個腳本(可能是與 /usr/bin/script.sh,與./script.sh,或者它可能是與 ../Downloads/repo/scr/script.sh

使用dirname "$0"將允許您跟蹤原始路徑。

  • 腳本script.sh將調用helper.sh之前改變到不同的目錄。
  • 再次,因爲你必須在$0路徑可以cd回去吧。

    相關問題