Bash
嘗試使用 readlink 時出現“是目錄”錯誤
我在 bash 中搞亂以嘗試創建自定義 PS1,但是當我嘗試列印我所在目錄的絕對路徑時遇到錯誤。我有一個目錄
$FIRMWARE
,它是一個符號連結。我想在 PS1 中顯示已解析的符號連結。我將以下程式碼刪除了其他資訊:export FIRMWARE="/path/to/firmware" firmware_link() { local A A="$(readlink ${FIRMWARE})" echo $A }
如果我呼叫這個函式,我會得到
> $(firmware_link) bash: /path/to/firmware: Is a directory
我嘗試關注這篇文章,但引用的建議並沒有解決我的問題。我感覺這是格式錯誤或對 bash 工作原理的根本誤解。
通過說:
$(firmware_link)
在
bash
提示下。您告訴bash
執行您的函式,然後將該函式的輸出作為 shell 命令處理。這種通用技術稱為命令替換,在您的範常式式碼中,會創建您注意到的錯誤。相反,嘗試簡單地呼叫該函式:
firmware_link
預期的輸出將是:
/path/to/firmware
要查看問題是如何產生的,請在 bash 提示符下手動輸入該目錄名稱:
/path/to/firmware -bash: /path/to/firmware: Is a directory
如果您稍微簡化一下程式碼,您可能會更容易發現程式碼中的錯誤:
export FIRMWARE="/path/to/firmware" firmware_link() { readlink "${FIRMWARE}" }
這使得函式的輸出
firmware_link
將是一個目錄名稱,而不是一個有效的bash
命令更加明顯。