No seu script, observo que a mensagem de ajuda é gerada por meio de:
usage2()
{
echo >&2 ""
echo >&2 "$PROGNAME:" "$@"
sed >&2 -e '1,/^####/d; /^######/g; /^#/!q; s/^#*//; s/^ //; 4,$p' "$PROGDIR/$PROGNAME"
}
Vamos analisar atentamente o comando sed:
sed >&2 -e '1,/^####/d; /^######/g; /^#/!q; s/^#*//; s/^ //; 4,$p' embroidery
O problema é que (1) por padrão, sed
imprime o que resta no espaço padrão no final dos comandos, mas (2) o comando 4,$p
causa um adicional impressão. Assim, cada linha é impressa duas vezes.
Uma solução é usar a opção -n
para suprimir a impressão padrão:
sed >&2 -ne '1,/^####/d; /^######/g; /^#/!q; s/^#*//; s/^ //; 4,$p' embroidery
Como o OSX (BSD) e o CentOS (Linux) usam versões diferentes do sed, alguns problemas de compatibilidade ocorrem.
A propósito, esse comando sed mais simples funciona para mim:
sed >&2 -ne '/^#####/q; 1,/^####/d; s/^#* *//p' embroidery
Mini-exemplo
Extraindo apenas algumas linhas-chave, o seu script é parecido com:
$ cat testfile
#!/bin/bash
#
# misc info 1
# misc info 2
#
####
#
# USAGE: embroidery [-n numcolors ] [-p pattern] [-t thickness] [-g graylimit]
# [-f fuzzval] [-b bgcolor] [-a angle] [-r range] [-i intensity] [-e extent]
# [-N newseed] [-M mix] infile outfile
######
#
usage2()
{
sed >&2 -e '1,/^####/d; /^######/g; /^#/!q; s/^#*//; s/^ //; 4,$p' "$0"
}
if [ $# -eq 0 ]
then
# help information
usage2
exit 0
fi
Se executarmos este script, a saída será semelhante a:
$ ./testfile
USAGE: embroidery [-n numcolors ] [-p pattern] [-t thickness] [-g graylimit]
USAGE: embroidery [-n numcolors ] [-p pattern] [-t thickness] [-g graylimit]
[-f fuzzval] [-b bgcolor] [-a angle] [-r range] [-i intensity] [-e extent]
[-f fuzzval] [-b bgcolor] [-a angle] [-r range] [-i intensity] [-e extent]
[-N newseed] [-M mix] infile outfile
[-N newseed] [-M mix] infile outfile
Vamos substituir o comando sed acima por:
sed >&2 -ne '/^#####/q; 1,/^####/d; s/^#* *//p' "$0"
Agora, a saída parece:
$ ./testfile2
USAGE: embroidery [-n numcolors ] [-p pattern] [-t thickness] [-g graylimit]
[-f fuzzval] [-b bgcolor] [-a angle] [-r range] [-i intensity] [-e extent]
[-N newseed] [-M mix] infile outfile