我在一个规范文件中有以下代码:

mkdir -p %{buildroot}%{_qt6_bindir}
pushd %{buildroot}%{_qt6_bindir}
for i in * ; do
  case "${i}" in
    qdbuscpp2xml|qdbusxml2cpp|qtpaths)
      ln -v  ${i} %{buildroot}%{_bindir}/${i}-qt6
      ;;
    *)
      ln -v  ${i} %{buildroot}%{_bindir}/${i}
      ;;
  esac
done
popd

当我运行Build时,我收到以下错误:

ln: target '/home/abuild/rpmbuild/BUILDROOT/qt6-qtbase-6.4.3-1.x86_64/usr/bin/qtpaths6': Not a directory

其中,qtpath6是一个可执行文件. 如何修复此错误?

推荐答案

实际情况是,目标路径的一个组成部分不是目录.我可以这样重现这个问题:

$ ln /etc/hosts/foo bar
ln: failed to access '/etc/hosts/foo': Not a directory

这是因为/etc/hosts是一个文件.我 Select 了那个广为人知的文件来让它变得显而易见.

(在我的ln版本中,诊断的措辞与您看到的并不完全相同.)

可能发生的情况是,ln调用link系统调用,该调用失败,返回-1,errnoENOTDIR.该程序只是通过strerror将该错误转换为Not a directory,并将该错误归因于目标路径.

我们知道ln不可能抱怨目标不是目录,因为这特别是disallowed:你不能硬链接到目录!

$ ln /etc ./etc
ln: /etc: hard link not allowed for directory

Linux相关问答推荐

无法在Raspberry PI 3 Model B上分配256TB的虚拟内存

如何在 shell 脚本中自定义 SFTP 详细输出

在Linux中随机化txt文件但保证不重复行

awk内部的变量操作

使用 grep 时如何跳过第一行和最后一行?

将行转换为一条

sed 命令在 gitlab runner 上无法正确执行

如何在ubuntu中通过.sh文件启动多个服务

在 SLURM 作业(job)脚本中设置和传递字符串变量

在 Linux 中 Select 多个同名的可执行文件

使用 AWS CLI 进行 Bash - 无法找到凭证

Ubuntu 上 Java 应用程序中的丑陋字体

Vagrant chicken-and-egg:与 uid = apache 用户共享文件夹

Linux 上的 C++ 开发 - 我从哪里开始?

kdevtmpfsi 使用整个 CPU

是否有一个 linux 命令来确定与给定进程 ID 关联的窗口 ID?

Colored shell 脚本输出库

grep 递归查找 Linux 上的特定文件类型

在 Linux 中的特定行向文件添加文本

/dev/random 非常慢?