Fazer bash dos-eol tolerante [fechado]

2

Acontece quando eu quero compilar um kernel Linux que de alguma forma acabo com essas mensagens:

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

Isso ocorre porque o arquivo é com DOS-EOL em vez do normal. Eu geralmente sou capaz de corrigir esses arquivos problemáticos com um dos2unix , mas nesse caso, o arquivo mkmakefile é gerado por algum outro script (usando o Yocto Linux Framework, mas eu tive o mesmo problema com o processo de criação do Android). / p>

Eu sei que há uma opção igncr bash para o CygWin, mas nada no bash do Linux.

Existe uma maneira / opção de dizer ao bash para ignorar \r caracteres (ou seja, ter \r\n equivalente a \n )?

EDITAR: Os erros aparecem nas primeiras linhas em branco entre o shebang e a primeira linha executável (linhas em branco entre os comentários).

Os logs do Yocto (que na verdade são Petalinux, Xilinx 'framework baseado em Yocto) mostram:

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

A linha 53 é um único marcador EOF , sem nenhuma nova linha (de cat << EOF > Makefile )

Eu acho que a última linha no script gerado é EOF^M , que não corresponde ao esperado EOF (sem o \r / ^M ).

    
por Matthieu 10.04.2018 / 13:58

2 respostas

1

Não, não há nenhuma maneira / opção de dizer ao bash para ignorar \r caracteres (ou seja, ter \r\n equivalente a \n ).

Os arquivos podem ser armazenados no sistema de arquivos com o final do arquivo, e o bash não tem nenhum problema com isso.

    
por 10.04.2018 / 14:24
1

A raiz do problema parece ser causada pelo uso do git internamente pelo processo de construção. No Linux, defina o autocrlf para input :

git config --global core.autocrlf input

A construção funcionou bem depois disso.

    
por 11.04.2018 / 10:03