尝试使用 readlink 时出现“是目录”错误

尝试使用 readlink 时出现“是目录”错误

我在 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命令,这一点变得更加明显。

相关内容