使 bash dos-eol 具有耐受性

使 bash dos-eol 具有耐受性

当我想要编译一些 Linux 内核时,会发生这种情况,不知怎的,我最终得到了这样的消息:

.../kernel-source/scripts/mkmakefile: line 5: $'\r': command not found

这是因为该文件带有 DOS-EOL 而不是普通文件。我通常能够使用 修补这些有问题的文件dos2unix,但在这种情况下,该mkmakefile文件是由其他一些脚本生成的(使用 Yocto Linux Framework,但我在 Android 构建过程中遇到了同样的问题)。

我知道igncrCygWin 有 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 下,请确保将其设置autocrlfinput

git config --global core.autocrlf input

之后构建工作正常。

相关内容