
나는 최근 bash 4.2.46
에 업그레이드했습니다bash version 4.2.50
다음 줄을 포함하는 스크립트가 있습니다.
mapfile -t my_array < <(grep ${ID} -w /etc/passwd | cut -d ":" -f 1,4,5)
여기서 ID는 파일에서 찾고 passwd
모든 결과를 배열에 로드하려는 정수입니다.
이전에는 작동했지만 이제는 오류가 발생합니다.
usage: grep [-r] [-R] [-H] [-L] [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] -e pattern_list...
[-f pattern_file...] [file...]
usage: grep [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] [-e pattern_list...]
-f pattern_file... [file...]
이 감가상각 문제를 해결하는 방법을 설명해 줄 수 있는 사람이 있나요? 을 사용해 보았 sed
으나 awk
출력 리디렉션 형식에 문제가 있는 것 같습니다.
텍스트 파일은 passwd
다음과 같습니다
name:garbageData:garbageData:ID:password
답변1
bash 대신 ksh를 사용하여 스크립트를 실행하면 sh-bang 헤더 행이 ksh를 잘못 가리키거나 /bin/sh(AIX의 경우 ksh)를 가리키거나 명시적으로 호출하는 경우 오류가 발생합니다 ksh /the/script
.
mapfile
ksh는 ksh93t+ 이전 버전, 즉 <( ...)
프로세스 교체 구문을 지원하지 않습니다.리디렉션 대상으로 사용되는 경우, 예를 들어 <
. 에 의해 명확화됨스티븐 차제라스.
bash를 호출하도록 sh-bang 줄을 수정합니다(또는 그러한 경우 ksh 대신 bash를 명시적으로 호출합니다).
또한 grep
모든 옵션 앞에 인수를 넣기 때문에 명령이 불평합니다.
grep -w "${ID}" /etc/passwd
(변수 확장으로도 인용됨)