我在 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 工作原理的根本误解。
通过说:
在
bash
提示下。您告诉bash
执行您的函数,然后将该函数的输出作为 shell 命令处理。这种通用技术称为命令替换,在您的示例代码中,会创建您注意到的错误。相反,尝试简单地调用该函数:
预期的输出将是:
要查看问题是如何产生的,请在 bash 提示符下手动输入该目录名称:
如果您稍微简化一下代码,您可能会更容易发现代码中的错误:
这使得函数的输出
firmware_link
将是一个目录名称,而不是一个有效的bash
命令更加明显。