linux 下 `dirname $0` shell 獲取當前正在執行腳本的絕對路徑


【`】,學名叫“倒引號”, 如果被“倒引號”括起來,  表示里面需要執行的是命令。
比如 `dirname $0`,  就表示需要執行   dirname $0  這個命令

【“”】 , 被雙引號括起來的內容, 里面 出現  $ (美元號: 表示取變量名)  `(倒引號: 表示執行命令)   \(轉義號: 表示轉義),   其余的才表示字符串。
【’‘】,  被單引號括起來的內容, 里面所有的都表示串, 包括上面所說的  三個特殊字符。

在命令行狀態下單純執行 $ cd `dirname $0` 是毫無意義的。因為他返回當前路徑的"."。

這個命令寫在腳本文件里才有作用,他返回這個腳本文件放置的目錄,並可以根據這個目錄來定位所要運行程序的相對位置(絕對位置除外)。

$0:當前Shell程序的文件名
dirname $0,獲取當前Shell程序的路徑
cd `dirname $0`,進入當前Shell程序的目錄

在/home/admin/test/下新建test.sh內容如下:

  1. cd `dirname $0`
  2. echo `pwd`

然后返回到/home/admin/執行

  1. sh test/test.sh

運行結果:

  1. /home/admin/test

這樣就可以知道一些和腳本一起部署的文件的位置了,只要知道相對位置就可以根據這個目錄來定位,而可以不用關心絕對位置。這樣腳本的可移植性就提高了,扔到任何一台服務器,(如果是部署腳本)都可以執行。

 

 

常見的一種誤區,是使用 pwd 命令,該命令的作用是“print name of current/working directory”,這才是此命令的真實含義,當前的工作目錄,這里沒有任何意思說明,這個目錄就是腳本存放的目錄。所以,這是不對的。你可以試試 bash shell/a.sh,a.sh 內容是 pwd,你會發現,顯示的是執行命令的路徑 /home/june,並不是 a.sh 所在路徑:/home/june/shell/a.sh

 

  另一個誤人子弟的答案,是 $0,這個也是不對的,這個$0是Bash環境下的特殊變量,其真實含義是:

   Expands to the name of the shell or shell script. This is set at shell initialization.  If bash is invoked with a file of commands, $0 is set to the name of that file. If bash is started with the -c option, then $0 is set to the first argument after the string to be executed, if one is present. Otherwise, it is set to the file name used to invoke bash, as given by argument zero.

   這個$0有可能是好幾種值,跟調用的方式有關系:

  • 使用一個文件調用bash,那$0的值,是那個文件的名字(沒說是絕對路徑噢)

  • 使用-c選項啟動bash的話,真正執行的命令會從一個字符串中讀取,字符串后面如果還有別的參數的話,使用從$0開始的特殊變量引用(跟路徑無關了)

  • 除此以外,$0會被設置成調用bash的那個文件的名字(沒說是絕對路徑)

下面對比下正確答案:

 

 

basepath=$(cd `dirname $0`; pwd)

 

在此解釋下basepath :

dirname $0,取得當前執行的腳本文件的父目錄

cd `dirname $0`,進入這個目錄(切換當前工作目錄)

pwd,顯示當前工作目錄(cd執行后的)

由此,我們獲得了當前正在執行的腳本的存放路徑。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM