Shell padrão para executar scripts (sem shebang) em macos?

2

Eu tenho ZSH como shell padrão no MacOS, tudo está funcionando bem. ZSH é instalado como pacote brew, Ive definir shell padrão na minha conta, novo shell está listado em /etc/shells ... tudo está definido, como eu disse.

Eu tenho alguns scripts de shell nos quais eu uso alguns comandos do zsh, como print . Quando executo o script a partir da linha de comando, o comando print não é reconhecido e o script falha.

Este script faz não ter a linha shebang. Quando eu coloco a linha shebang para zsh, tudo funciona; o comando print está funcionando.

Como estou usando apenas o ZSH, é possível definir o shell padrão para executar scripts , portanto, não preciso colocar a linha shebang em meus scripts .zsh?

Ou é possível associar a extensão .zsh à execução do shell ZSH?

    
por Igor Spasic 21.08.2014 / 17:59

1 resposta

4

O Z shell usa /bin/sh se você executar um script executável sem a linha shebang (consulte man zshmisc , seção COMMAND EXECUTION ou confira esta resposta para uma lista abrangente). Isso parece codificado. Então, se você não quiser usar o unix-way (adicione shebang line), você pode usar um apelido chamado sufixo no shell Z para executar todos os arquivos com uma certa extensão com um certo programa . No seu caso

alias -s zsh=zsh

deve fazer o truque. A forma geral é (como o exemplo acima não é tão claro):

alias -s extension=program

A página man explica como isso funciona:

If the -s flag is present, define a suffix alias: if the command word on a command line is in the form text.name, where text is any non-empty string, it is replaced by the text value text.name. Note that name is treated as a literal string, not a pattern.

A trailing space in value is not special in this case. For example,

alias -s ps=gv

will cause the command *.ps to be expanded to gv *.ps. As alias expansion is carried out earlier than globbing, the *.ps will then be expanded. Suffix aliases constitute a different name space from other aliases (so in the above example it is still possible to create an alias for the command ps) and the two sets are never listed together.

Se você quiser usar scripts localizados em algum lugar no seu $PATH , use

alias -s zsh="zsh -o PATH_SCRIPT"

Isso ativa a opção PATH_SCRIPT :

If the option PATH_SCRIPT is set, and the file name does not contain a directory path (i.e. there is no '/' in the name), first the current directory and then the command path given by the variable PATH are searched for the script.

Por favor, note que o diretório atual é procurado pelo script, mesmo que . não esteja no seu PATH !

    
por 21.08.2014 / 18:50