Eu atualizei recentemente de bash 4.2.46
parabash version 4.2.50
Eu tinha um script com a linha:
mapfile -t my_array < <(grep ${ID} -w /etc/passwd | cut -d ":" -f 1,4,5)
onde ID é um inteiro arbitrário que gostaríamos de procurar no arquivo passwd
e, em seguida, carregar todos os resultados em uma matriz.
que costumava funcionar, mas agora lança um erro
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...]
alguém pode explicar como contornar essa depreciação? Eu tentei usar sed
e, awk
no entanto, o problema parece ser o formato do meu redirecionamento de saída.
o arquivo de texto passwd
se parece com isso
name:garbageData:garbageData:ID:password
Você obteria esse erro se executasse o script com ksh em vez de com bash; ou a linha de cabeçalho sh-bang aponta incorretamente para ksh, ou aponta para /bin/sh, que é ksh no AIX, ou você a está chamando explicitamente como
ksh /the/script
.ksh não suporta
mapfile
nem com versões anteriores a ksh93t+, a<( ...)
sintaxe de substituição de processo quando usada como destino de um redirecionamento , como<
. Esclarecimento fornecido por Stéphane Chazelas .Corrija a linha sh-bang para chamar bash (ou invoque explicitamente bash em vez de ksh, se for o caso).
Além disso, o
grep
comando está reclamando porque você colocou um argumento antes de todas as opções; reorganize o grep para ser:(citando também a expansão da variável).