A execução do make para o LFS reclama sobre [e sobre a falta do gawk

2

Estou com um erro estranho quando tento iniciar o processo make para o LFS usando o tronco SVCD do LiveCD. Quando eu vou executar make me dá;

$ make
/bin/sh: 1: [: -ne: unexpected operator
-e Missing gawk on host!
Please install gawk and re-run 'make'.
make: *** [test-host] Error 1

mas eu já tenho o gawk instalado e consigo ver isso quando executo o script version-check.sh .

bash, version 4.3.11(1)-release
/bin/sh -> /bin/dash
Binutils: (GNU Binutils for Ubuntu) 2.24
bison++ Version 1.21.9-1, adapted from GNU bison by [email protected]
/usr/bin/yacc -> /usr/bin/bison++.yacc
bzip2,  Version 1.0.6, 6-Sept-2010.
Coreutils:  8.21
diff (GNU diffutils) 3.3
find (GNU findutils) 4.4.2
GNU Awk 4.0.1
/usr/bin/awk -> /usr/bin/gawk
gcc (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2
g++ (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2
(Ubuntu EGLIBC 2.19-0ubuntu6.6) 2.19
grep (GNU grep) 2.16
gzip 1.6
Linux version 3.13.0-37-generic (buildd@kapok) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014
m4 (GNU M4) 1.4.17
GNU Make 3.81
GNU patch 2.7.1
Perl version='5.18.2';
sed (GNU sed) 4.2.2
tar (GNU tar) 1.27.1
xz (XZ Utils) 5.1.0alpha
g++ compilation OK
libgmp.la: not found
libmpfr.la: not found
libmpc.la: not found

mesmo no meu diretório de caminho, vejo que gawk está realmente instalado.

$ ls -la /usr/bin | grep awk
lrwxrwxrwx  1 root    root          21 Mar  4 17:36 awk -> /etc/alternatives/awk
-rwxr-xr-x  1 root    root      538224 Jul  3  2013 dgawk
-rwxr-xr-x  1 root    root         950 Mar 16  2012 dpkg-awk
-rwxr-xr-x  1 root    root      441512 Jul  3  2013 gawk
-rwxr-xr-x  1 root    root        3188 Jul  3  2013 igawk
-rwxr-xr-x  1 root    root      117768 Mar 24  2014 mawk
lrwxrwxrwx  1 root    root          22 Mar  4 17:36 nawk -> /etc/alternatives/nawk
-rwxr-xr-x  1 root    root      445608 Jul  3  2013 pgawk

Não entendo porque ele afirma que não está instalado quando está instalado. Por que isso está acontecendo?

    
por Gilles 29.06.2015 / 17:34

1 resposta

1

Parece que esse código é onde está o problema:

test-host:
        @if [ $$EUID -ne 0 ] ; then \
         echo "You must be logged in as root." && exit 1 ; fi
        @if ! type -p gawk >/dev/null 2>&1 ; then \
         echo -e "Missing gawk on host!\nPlease install gawk and re-run 'make'." && exit 1 ; fi

Quando o primeiro if … é executado, a variável EUID não está definida, portanto, o comando [ -ne 0 ] é executado e esta não é uma sintaxe válida para o utilitário [ . Quando o segundo if … for executado, o comando type -p gawk será executado e retornará um status com falha, mesmo que gawk exista, indicando que PATH não está configurado corretamente ou que o comando type não está configurado t suporta a opção -p . (Spoiler: é o último.) E a mensagem de erro tem -e no início, mostrando que echo não reconhece -e como uma opção.

Esse makefile conta com recursos bash: EUID , echo -e e type -p são recursos bash. O sh do seu sistema é traço, não bash (o traço é o padrão no Debian e check-version.sh confirma que /bin/sh é traço). Dash é um shell mais enxuto e rápido que o bash; não tem muito mais do que o POSIX requer, e isso não inclui EUID ou type -p . Eu não passei pelo makefile, mas provavelmente há muito mais lugares onde é necessário bash.

Como o makefile requer o bash, ele deve conter uma linha com SHELL = bash . Na ausência de tal linha, diga make para usar o bash como o shell para todos os comandos: run

make SHELL=/bin/bash
    
por 30.06.2015 / 03:04

Tags