Bash
從 bash 包中的 cli 訪問安裝文件夾
我正在創建一個純粹用 bash 編寫的包(weffe),其中包含腳本需要訪問的執行檔和靜態文件。
/usr/bin/weffe
但是,如果包是用 git 複製的,或者如果它安裝到文件夾中的數據,我希望這個腳本能夠與本地文件一起執行/usr/share/weffe
。如果包是從命令行執行的,例如,如果在終端上執行,有沒有辦法讓二進製文件通過執行類似命令或訪問 shell 變數weffe
來了解自己的安裝目錄(在這種情況下)?/usr/share/weffe``whereis
如果這是不可能的,最好的選擇是什麼?我考慮過的一些事情是製作一個在建構過程中手動為安裝目錄創建變數的 Makefile,或者
/usr/share/weffe
在嘗試從該位置訪問文件之前檢查硬編碼目錄是否存在。任何幫助,將不勝感激。
考慮在目錄中找到
weffe
執行檔,/usr/share/weffe/weffe-or-other-name
然後在bin
目錄中連結到它,例如cd /usr/bin; ln -s ../share/weffe/weffe
.您的腳本可以使用該
dirname
命令找到它的位置。當它是符號連結時,將返回符號連結路徑。因此,如果您想找到它的“真實”路徑,那麼您可以使用dirname
和的組合readlink
。#!/usr/bin/env bash # Assuming you have soft linked in the bin dir. # cd /usr/bin; ln -s ../share/weffe/weffe # /usr/share/weffe/weffe script_path="$(dirname "$0")" # GNU readlink requires a -f argument. # macOS realink does not require -f argument. script_real_relative_path="$(readlink "$0")" echo "script path: $script_path" echo "script real path: $script_real_relative_path"