Bash

嘗試使用 readlink 時出現“是目錄”錯誤

  • January 10, 2022

我在 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命令更加明顯。

引用自:https://unix.stackexchange.com/questions/685828