LFS에 대해 make를 실행하면 [ 및 gawk 부족에 대해 불평합니다.

LFS에 대해 make를 실행하면 [ 및 gawk 부족에 대해 불평합니다.

makeLiveCD SVN 트렁크를 사용하여 LFS 프로세스를 시작하려고 하면 이상한 오류가 발생합니다. 내가 달리러 갈 때 make그것은 나에게 준다 ;

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

version-check.sh하지만 저는 gawk를 설치했고 스크립트를 실행할 때 이것을 볼 수 있습니다.

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

내 경로 디렉토리에서도 gawk실제로 설치되어 있음을 알 수 있습니다.

$ 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

설치할 때 설치되지 않았다고 주장하는 이유를 이해할 수 없습니다. 왜 이런 일이 발생합니까?

답변1

이 코드가 문제인 것 같습니다.

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

첫 번째 명령을 실행할 때 if …변수가 설정되지 않아 명령이 실행되지만 이는 유틸리티에 유효한 구문이 아닙니다. 두 번째 실행 시 해당 명령이 실행되고, 존재하더라도 올바르게 설정되지 않았거나 해당 명령에서 해당 옵션을 지원하지 않는다는 오류 상태를 반환합니다. (스포일러: 후자입니다.) 오류 메시지는 처음에 옵션으로 인식되지 않음을 나타냅니다.EUID[ -ne 0 ][if …type -p gawkgawkPATHtype-p-eecho-e

이 메이크파일은 bash 기능에 따라 다릅니다. EUID는 bash 기능 echo -e입니다 . type -p귀하의 시스템은 shbash가 아닌 dash입니다(dash는 Debian의 기본값이므로 dash인지 check-version.sh확인 하십시오 /bin/sh). Dash는 bash보다 더 간결하고 빠른 쉘입니다. POSIX보다 더 많은 것이 필요하지 않으며 EUID또는 type -p. 아직 makefile을 살펴보지는 않았지만 bash가 필요한 곳이 더 있을 수도 있습니다.

makefile에는 bash가 필요하므로 다음 줄이 포함되어야 합니다 SHELL = bash. 그러한 줄이 없으면 make에게 모든 명령에 대해 bash를 사용하도록 지시합니다.

make SHELL=/bin/bash

관련 정보