我需要使用驻留在文件中的给定路径读取 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)
会返回上面提到的错误消息。
所有文件都驻留在同一目录下,并且调用也从该目录发生。
为什么我不能这样“猫”?
答案1
这些猫都工作了,但波形符 ( ~
) 没有像通常在命令行上那样进行处理。内部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)
。请注意,这会带来额外的评估层,因此该密钥文件内的任何重定向或后续命令都会被执行 - 当然,还有您想要的波形符扩展。