bash dos-eolを許可する

bash dos-eolを許可する

いくつかのLinuxカーネルをコンパイルしようとすると、これが起こり、どういうわけか次のメッセージが表示されます。

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

これは、ファイルに通常のファイルではなくDOS-EOLが含まれているためです。通常、これらの問題のあるファイルにパッチを適用できますが、dos2unixこの場合、mkmakefileファイルは別のスクリプト(Yocto Linuxフレームワークを使用しますが、Androidのビルドプロセスでは同じ問題がある)によって作成されました。

igncrCygWinにはbashオプションがありますが、Linux bashにはないことがわかります。

\rbashに文字(\r\n等しい文字など)を無視するように指示する方法/オプションはありますか\n

編集:shebangと最初の実行可能行の間の最初の空白行(コメント間の空白行)でエラーが発生します。

Yoctoログ(実際には、ザイリンクスのYoctoベースのフレームワークであるPetalinux)は、次のことを示しています。

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

EOF行53は改行文字のない単一のトークンです(cat << EOF > Makefilefrom

生成されたスクリプトの最後の行は、予想されたものとEOF^M一致しないようですEOF\r/なし^M)。

答え1

いいえ、bashに文字を無視するように指示する方法/オプションはありません\r(つまり、\r\n同等\n)。

ファイルはファイルの終わりの1つとしてファイルシステムに保存することができ、bashはこれに問題はありません。

答え2

問題の原因は、ビルドプロセス内でgitを使用したために発生したようです。 Linuxでは、autocrlf次のように設定されていることを確認してくださいinput

git config --global core.autocrlf input

その後、ビルドはうまく動作します。

関連情報