2016-09-27 88 views
0

我對bash及其工作有點新,但我想知道bash中是否有訪問可能在其地址中發生更改的目錄到用戶將其安裝在bash中的位置。 (這一切發生的時候,所以必須有)Bash〜可能會改變的訪問目錄,從目錄的子目錄內的腳本

例如: 我有了的../program-directory/..

目錄中的程序,但然後用戶下載的程序文件/extra-directory/建立的情況下,我們有/extradirectory/program-directory

然後,我有在../program-directory/script-directory/script/example.bash

運行bash腳本,我會那麼喜歡grep -rnw 'sample text' /program-directoryexample.bash腳本

是否有一行沒有簡單的方法,我可以在program-directory的grep沒有在用戶安裝此程序

僅供參考,我已經看過Can a Bash script tell which directory it is stored in?的麻煩,但我需要從一個叫腳本在../program-directory到grep的../program-directory

+0

這是一個非常混亂的描述,我不確定你在問什麼。你是否在說(在你的最後一行)你需要記住一個目錄,以便以後能夠切換回目錄?如果是這樣,'$ OLDPWD'保存'$ PWD'的先前值。但是,你可能會發布一些代碼來展示你想要做什麼,期望發生什麼,以及如果你有那麼多失敗的地方,可能會更好。 – gilez

+0

你只是想要一個相對路徑,例如'grep -rnw'示例文本'../ ..'? – ccarton

+0

我寫的最後一行的道歉很蠢,我只是想用example.bash腳本訪問../program-directory – PJConnol

回答

1

子目錄如果你的程序是在/some/example/dir/program-directory/script-directory/script/example.bash,你想你在bash代碼編寫的文件/some/example/dir/program-directory/sample.txt然後運行grep

main() { 
    local DIR="$(dirname "$0")" 
    local DIR="$(cd "${DIR}" && pwd)" 
    cd "${DIR}" 
    grep 'search term' -- ../../sample.txt 
} 

上面的代碼有很多變體,其含義相同或意義稍有改變。此代碼是爲了清晰和正確處理具有空格和特殊字符的目錄名而編寫的。這段代碼故意忽略了currend工作目錄(就我所知,這就是你想要的)。

+0

這正是我想要的謝謝 – PJConnol