Em foo.sh , tenho alguns comandos (ou funções) divididos em várias linhas e comentários adicionados, para facilitar a leitura:
#!/bin/zsh
#
# foo.sh: print computer information
foo() {
uname \
-p `# processor arch` \
-s `# os name` \
-v `# os version`
}
foo
O que funciona
Eu posso executá-lo bem:
$ ./foo.sh
Darwin 123... (correct output)
O que não funciona
Mas se eu o originar com source
ou .
, meu shell relatará o seguinte erro, embora o comando seja executado com êxito com meus argumentos especificados ( -psv
):
% . ./foo.sh
./foo.sh:2: command not found: #
./foo.sh:2: command not found: #
./foo.sh:2: command not found: #
Darwin 123... (correct output as before)
Eu me pergunto por que isso acontece? E como faço para corrigir? Porque meu objetivo principal é definir algumas funções, originá-las e chamá-las no shell conforme necessário. Obrigada!
Por padrão, o zsh reconhece apenas comentários em scripts, não quando executados interativamente. Isso deve se aplicar a scripts de origem, mas em versões recentes (reproduzi esse comportamento em 5.8, mas 5.4.2 aceita seu código muito bem), isso também se aplica a alguns códigos que são analisados após o carregamento, como código dentro de substituição de comando . Isso provavelmente é um bug.
Coloque
setopt interactive_comments
seus.zshrc
comentários de suporte ao executar interativamente. Isso realmente não tem uma desvantagem: significa que você precisa citar#
no início de uma palavra, mas#
raramente aparece no início de uma palavra em uma linha de comando. (#
dentro de uma palavra não inicia um comentário, então isso não afeta o uso de#
como umextended_glob
caractere curinga ou na expansão de parâmetros.)Alternativamente (ou adicionalmente), adicione
dentro da função. Então os comentários funcionarão.