Cat
如何使用從文件中讀取的路徑讀取 ssh 密鑰文件的內容?
我需要使用給定路徑讀取 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
.兩種解決方案:
- 包括文件的絕對路徑:而不是 path_to_key.txt 包含
~/.ssh/firstname.lastname
,它將包含(例如)/home/you/.ssh/firstname.lastname
- 將外部包裹
cat
起來,eval
以便重新處理生成的命令(在發生命令替換之後) :eval cat $(cat path_to_key.txt)
。請注意,這帶來了額外的評估層,因此該密鑰文件中的任何重定向或後續命令都會被執行——當然,還有你想要的波浪號擴展。