我在 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 工作原理的根本误解。
答案1
通过说:
$(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
命令,这一点变得更加明显。