当我想要编译一些 Linux 内核时,会发生这种情况,不知怎的,我最终得到了这样的消息:
.../kernel-source/scripts/mkmakefile: line 5: $'\r': command not found
这是因为该文件带有 DOS-EOL 而不是普通文件。我通常能够使用 修补这些有问题的文件dos2unix
,但在这种情况下,该mkmakefile
文件是由其他一些脚本生成的(使用 Yocto Linux Framework,但我在 Android 构建过程中遇到了同样的问题)。
我知道igncr
CygWin 有 bash 选项,但 Linux bash 上没有。
有没有一种方法/选项可以告诉 bash 忽略\r
字符(即\r\n
相当于\n
)?
编辑:错误出现在 shebang 和第一个可执行行之间的第一个空行(注释之间的空行)。
Yocto 日志(实际上是 Petalinux,Xilinx 基于 Yocto 的框架)显示:
DEBUG: Executing python function sysroot_cleansstate
DEBUG: Python function sysroot_cleansstate finished
DEBUG: Executing python function check_oldest_kernel
DEBUG: Python function check_oldest_kernel finished
DEBUG: Executing shell function do_configure
NOTE: make HOSTCC=gcc HOSTCPP=gcc -E -C .../project/build/tmp/work-shared/plnx_arm/kernel-source O=.../project/build/tmp/work/plnx_arm-xilinx-linux-gnueabi/linux-xlnx/4.9-xilinx-v2017.4+gitAUTOINC+b450e900fd-r0/linux-plnx_arm-standard-build oldnoconfig
NOTE: make HOSTCC=gcc HOSTCPP=gcc -E -C .../project/build/tmp/work-shared/plnx_arm/kernel-source O=.../project/build/tmp/work/plnx_arm-xilinx-linux-gnueabi/linux-xlnx/4.9-xilinx-v2017.4+gitAUTOINC+b450e900fd-r0/linux-plnx_arm-standard-build oldconfig
ERROR: oe_runmake failed
make: Entering directory '.../project/build/tmp/work-shared/plnx_arm/kernel-source'
make[1]: Entering directory '.../project/build/tmp/work/plnx_arm-xilinx-linux-gnueabi/linux-xlnx/4.9-xilinx-v2017.4+gitAUTOINC+b450e900fd-r0/linux-plnx_arm-standard-build'
.../project/build/tmp/work-shared/plnx_arm/kernel-source/scripts/mkmakefile: line 5: $'\r': command not found
.../project/build/tmp/work-shared/plnx_arm/kernel-source/scripts/mkmakefile: line 11: $'\r': command not found
.../project/build/tmp/work-shared/plnx_arm/kernel-source/scripts/mkmakefile: line 12: $'\r': command not found
.../project/build/tmp/work-shared/plnx_arm/kernel-source/scripts/mkmakefile: line 52: warning: here-document at line 24 delimited by end-of-file (wanted `EOF')
.../project/build/tmp/work-shared/plnx_arm/kernel-source/scripts/mkmakefile: line 53: syntax error: unexpected end of file
make[1]: *** [.../project/build/tmp/work-shared/plnx_arm/kernel-source/Makefile:461: outputmakefile] Error 2
make[1]: Leaving directory '.../project/build/tmp/work/plnx_arm-xilinx-linux-gnueabi/linux-xlnx/4.9-xilinx-v2017.4+gitAUTOINC+b450e900fd-r0/linux-plnx_arm-standard-build'
make: *** [Makefile:150: sub-make] Error 2
第 53 行是单个EOF
标记,没有任何换行符(来自cat << EOF > Makefile
)
我猜生成的脚本中的最后一行是EOF^M
,它与预期不匹配EOF
(没有\r
/ ^M
)。
答案1
不,没有办法/选项告诉 bash 忽略\r
字符(即\r\n
相当于\n
)。
文件可以以任一文件结尾存储在文件系统中,bash 对此没有问题。
答案2
问题的根源似乎是由构建过程内部使用 git 引起的。在 Linux 下,请确保将其设置autocrlf
为input
:
git config --global core.autocrlf input
之后构建工作正常。