Se o script começar corretamente com #!/bin/bash
(você não pode ter outro comentário antes disso), você deve simplesmente executá-lo digitando /path/to/script.sh
, sem que .
no início. O .
é uma instrução include, significa “executar o conteúdo deste arquivo como se tivesse sido digitado aqui na linha de comando” (isso é chamado de “sourcing” no jargão do shell unix).
A execução do bash e o fornecimento do script devem funcionar. Eu estou supondo que porque você tinha o bash iniciado automaticamente em algumas circunstâncias, mas você prefere o zsh, você configurou o bash para alternar automaticamente para o zsh - talvez com exec zsh
no seu ~/.bashrc
. Não faça isso: em vez disso, você deve alternar para zsh no arquivo executado ao efetuar login, ou seja, ~/.profile
e deixar .bashrc
sozinho. Para que zsh
seja executado nos terminais, defina a variável de ambiente SHELL
:
# in ~/.profile
export SHELL=/bin/zsh
if [ -t 1 ]; then exec $SHELL; fi
É uma pena que você não possa modificar o script, porque é um buggy. Os colchetes devem ser citados, mesmo no bash. Se houver um arquivo chamado 3+
no diretório atual, a chamada para egrep
procurará uma ou mais ocorrências do dígito 3
em vez de uma seqüência de dígitos arbitrários. Se houver um arquivo chamado 3+
e um arquivo chamado 4+
, a chamada para egrep
procurará 3
s no arquivo 4+
. Aqui, a diferença entre bash e zsh só entra em jogo quando nenhum arquivo corresponde ao padrão fornecido: bash silenciosamente executa o comando com o padrão não-substituído, enquanto zsh sinaliza um erro (por padrão).