Grande Ulisses,
Esse cara que te respondeu, o Fernando Mercês, é o papa da segurança no Brasil e, como não poderia deixar de ser, conhece muuuuuito Shell. Seu único defeito é não instalar um Debian ou um Fedora no seu Apple, para desfrutar do YAD... KKKKK # (comentário) Nando, não resisti...
Devido a isso, tudo que ele falou está super correto. Sobre a caixa alta, veja isso:
$ export | wc -l
43
Isso significa que nesse exato momento o Shell está disponibilizando 43 variáveis (muitas que não conheço) todas com letras maiúsculas. Assim sendo, duas coisas ocorrem:
- A possibilidade de criar uma variável homônima é grande e já apanhei para descobrir um erro desses em um prg de outrem;
- Dificulta a leitura do prg, pois nunca se sabe se a variável é local ou do sistema.
A outra coisa que ele falou foi da evolução do cmd test. Começou como test, depois apareceu o [ ... ] e a partir do bash 3.NN apareceu a notação [[ ... ]] com mais recursos e com diversas implementações.
Queria colocar mais uma coisa.
Vc fez:
SEARCH=$(yad --title "Password search" --entry --entry-label="Search: " \
--button=gtk-cancel:1 --button=gtk-ok:0)
Isso tem o mesmo efeito de :
SEARCH=$(yad --title "Password search" --entry --entry-label="Search: ")
Pois esses 2 botões são padrão
Vc fez:
RESULTS=$(find ~/.password-store/ ! -path *.git/* -type f -iname *$SEARCH*)
if [ "$?" == "1" ]; then
exit 0
fi
Aqui tem um erro, não é advertência. Jamais deixe um *, um ?, ... qq coringa de bobeira para o Shell expandir. Experimente fazer:
$ SEARCH=a
e executar essa linha. Zebra!!! Pq deu zebra? Pq o Shell (e não o find) expandiu o nome do arquivo e pesquisou, no diretório corrente, todos os arquivos que continha a letra "a" no nome. O correto seria -iname "*$SEARCH*" ou -iname \*$SEARCH\*
Outro caso, eu sempre digo que 99% das vezes o if (ou test, ou [ ... ], ou [[ ... ]]) junto com $? é pleonasmo. Ambos foram feitos para testar instrução e como o $? é o retorno do cmd, pq não testá-lo direto, assim:
RESULTS=$(find ~/.password-store/ ! -path *.git/* -type f -iname *$SEARCH*) || exit # o zero é padrão
No grupo:
GPGFILE=$(yad --title "Password search" --button="Back to search":1 --button=gtk-ok:0 \
--width 300 --height=400 --list --column=Password <<< $(basename -s .gpg -a $RESULTS))
if [ "$?" == "1" ]; then
continue
fi
Vale a observação do $? agravado por uma circunstância: se vc fechar o diálogo naquele xizinho na parte superior direita, $?=256 e GPGFILE estará vazia dando encrenca após.
Só mais uma obs:
$ Prg=/etc/acpi/events/ibm-wireless
$ Var=$(basename $Prg); echo $Var
ibm-wireless
$ Var=${Prg##*/}; echo $Var
ibm-wireless
Sendo o segundo muuuuito mais rápido. Não tentei entender a lógica do seu prg por falta de tempo, mas será que não dá para trocar?
Julio
» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
Somente nesta semana de 15-19/06, as inscrições estarão
abertas para uma nova turma. Veja mais detalhes em:
Também damos treinamento em sua empresa
em qualquer cidade, com certificado e nota fiscal.