Cat

如何使用從文件中讀取的路徑讀取 ssh 密鑰文件的內容?

  • April 26, 2019

我需要使用給定路徑讀取 ssh 密鑰的內容,該路徑位於如下文件中:我的 ssh 私鑰是:~/.ssh/firstname.lastname

當我cat ~/.ssh/firstname.lastname在 ubuntu 上呼叫終端時,我得到了預期的結果。但是,如果我要從任何文本文件中獲取我的 ssh 密鑰的路徑,那麼我會得到cat: '~/.ssh/firstname.lastname': No such file or directory.

例如,我有path_to_key.txt包含單行的文件~/.ssh/firstname.lastname

所以在終端中呼叫cat $(cat path_to_key.txt)會返回上面提到的錯誤消息。

所有文件都駐留在同一目錄下,並且呼叫也發生在該目錄下。

為什麼我不能以這種方式“貓”?

貓都可以工作,但是波浪號 ( ~) 沒有像通常在命令行上那樣處理。內部cat返回文件的內容,但外部cat已經處理了波浪號擴展、萬用字元、變數擴展等。因此,外部 cat 通過字面名稱~/.ssh/firstname.lastname而不是預期的/path/to/your/home/.ssh/firstname.lastname.

兩種解決方案:

  1. 包括文件的絕對路徑:而不是 path_to_key.txt 包含~/.ssh/firstname.lastname,它將包含(例如)/home/you/.ssh/firstname.lastname
  2. 將外部包裹cat起來,eval以便重新處理生成的命令(在發生命令替換之後) : eval cat $(cat path_to_key.txt)。請注意,這帶來了額外的評估層,因此該密鑰文件中的任何重定向或後續命令都會被執行——當然,還有你想要的波浪號擴展。

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