You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

首次构建RPM遭遇$'\r': command not found错误求助

解决RPM构建中的$'\r': command not found错误

问题描述

尝试构建第一个RPM包时反复报错:

/var/tmp/rpm-tmp.6K3TRj: line 33: $'\r': command not found
error: Bad exit status from /var/tmp/rpm-tmp.6K3TRj (%prep)

执行命令rpmbuild -bb ~/rpmbuild/SPECS/test.spec触发错误,spec文件内容如下:

Name:           test
Version:        0.0.2
Release:        1%{?dist}
Summary:        test
BuildArch:      noarch

License:        GPL
Source0:        %{name}-%{version}.tar.gz


Requires:       bash


%description
test

%prep
%setup -q


%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/%{_bindir}
cp %{name}.sh $RPM_BUILD_ROOT/%{_bindir}

%clean
rm -rf $RPM_BUILD_ROOT

%files

%{_bindir}/%{name}.sh

完整构建输出:

Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.6K3TRj
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd /root/rpmbuild/BUILD
+ rm -rf api-controller-0.0.2
+ /usr/bin/tar -xf /root/rpmbuild/SOURCES/test-0.0.2.tar.gz
+ cd test-0.0.2
+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ $'\r'
/var/tmp/rpm-tmp.6K3TRj: line 33: $'\r': command not found
error: Bad exit status from /var/tmp/rpm-tmp.6K3TRj (%prep)


RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.6K3TRj (%prep)

解决方法

该错误由**文件包含Windows风格换行符(CRLF)**导致,Linux Shell无法识别\r字符,将其误判为命令执行。需处理以下两类文件:

  • 转换spec文件的换行符
    使用dos2unix工具直接转换:

    dos2unix ~/rpmbuild/SPECS/test.spec
    

    若系统未安装dos2unix,可通过sed命令手动替换:

    sed -i 's/\r$//' ~/rpmbuild/SPECS/test.spec
    
  • 转换源码包内文件的换行符
    解压源码包,批量转换所有文件后重新打包:

    # 解压源码包
    tar xf ~/rpmbuild/SOURCES/test-0.0.2.tar.gz
    # 递归转换目录内所有文件的换行符
    find test-0.0.2 -type f -exec dos2unix {} \;
    # 重新打包为tar.gz格式
    tar czf ~/rpmbuild/SOURCES/test-0.0.2.tar.gz test-0.0.2
    # 清理临时解压目录
    rm -rf test-0.0.2
    

完成上述操作后,重新执行rpmbuild -bb ~/rpmbuild/SPECS/test.spec即可完成RPM包构建。

内容的提问来源于stack exchange,提问作者J-D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 23:15:25