shell 中擷取當前工作路徑和命令檔案所在絕對路徑

來源:互聯網
上載者:User
[轉]linux shell 擷取當前正在執行指令碼的絕對路徑


常見的一種誤區,是使用 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執行後的)

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.