2016-09-29 71 views
3

我的第一個問題就是SO,所以如果沒有正確地做某件事,道歉!在一個Bash裏面的Cd功能

在互聯網上有很多關於在腳本中使用cd的問題,但我的問題是在我使用內置於我的.bashrc的bash函數中的cd。它的任務是找到一個文件並轉到該文件的工作目錄。在找到多個文件的情況下,我只是轉到第一個文件。那就是:

fcd() { 
cd $PWD 
if [ -z "$1" ]; then 
    echo 'Specify a file name to find' 
else 
    found_dir=$(find . -name $1 -type f -printf \"%h/\" -quit) 
    echo $found_dir 
    if [ -z "$found_dir" ]; then 
     echo "No file found. Directory was not changed" 
    else 
     cd $found_dir 
    fi 
fi 
} 

然而,當我使用它,在目錄中找到,而是試圖cd $found_dir結果的消息中:

cd: (directory_here): No such file or directory 

我排除的路徑是錯誤的可能性 - 通過複製echo $found_dir的輸出並將其粘貼到cd前,目錄被成功更改。有任何想法嗎?

感謝,

的Jakub

回答

6

你不應該引用在find命令的目錄,你應該以後引用它,當你使用變量。所以從

find . -name $1 -type f -printf \"%h/\" -quit 

改變find命令

find . -name "$1" -type f -printf %h -quit 

第一個命令返回用引號引起來的目錄路徑,如"/path/to/dir"。因此,當您嘗試cd到該目錄時,cd會認爲引號是路徑的一部分。

然後調整cdcd "$found_dir"以確保如果$found_dir包含特殊字符,如空格或*cd不會失敗。

另請注意,cd $PWD是多餘的,因爲我們已經在該目錄中。事實上,它可能會導致問題,因爲你沒有引用變量。

+0

哦,是的,CD $ PWD是我愚蠢的調試嘗試。你的解決方案工作,你們是最好的! –