Convertendo bash para zsh: declare function e if statement

2

Eu copiei esse código de algum lugar e estou tentando modificá-lo para minhas necessidades. Ele foi projetado para bash , mas estou executando em zsh .

Eu sempre tenho problemas para executar scripts bash sob o zsh, já que parece haver algumas diferenças entre os dois idiomas (?). Alguém é capaz de me dizer o que eu preciso modificar aqui para que ele funcione com zsh ?

declare -a files=(
  "$HOME/.dotfiles/bash/exports" # Exports
  "$HOME/.dotfiles/bash/aliases" # Aliases
  "$HOME/.dotfiles/bash/functions" # Functions
  "$HOME/.z.sh" # z binary from https://github.com/rupa/z
  "$NVM_HOME/nvm.sh" # NVM
  "$ZSH/oh-my-zsh.sh"
)

# If these files are readable, source them
for index in ${!files[*]}
do
  if [ -r ${files[$index]} ]; then
    source ${files[$index]}
  fi
done

unset files
    
por Oliver Joseph Ash 06.01.2013 / 00:12

2 respostas

1

Aqui está a ~/.zshrc que fontes um monte de outros arquivos:

# Load the zsh files. 
# This is taken from Frank Terbeck's ZSH setup.
for rc in ~/.zshrc.d/???-*.z; do
    if [[ -r ${rc} ]] ; then
        zprintf 1 "zshrc: loading %s\n" "$rc"
        source "$rc"
    else    
        zprintf 0 "zshrc: could not load %s\n" "$rc"
    fi      
done    
unset rc

Isso gerará source arquivos em ~/.zshrc.d/ com um nome de arquivo começando com um número de 3 dígitos (por exemplo, 421-Name.zsh ).

A vantagem deste método é que ele permite que você tenha um único diretório ( ~/.zshrc.d/ ) contendo todos os seus scripts de inicialização. Você pode adicionar / remover desse diretório sem ter que tocar em vários arquivos (você não precisa editar ~/.zshrc toda vez que adicionar um script).

Para alterar os nomes dos arquivos, edite esta linha:

for rc in ~/.zshrc.d/???-*.z; do

O diretório que está pesquisando é ~/.zshrd.d/ . Se você não quiser um prefixo de 3 dígitos, remova o ???- . A extensão ( .z ) também pode ser alterada aqui.

Observação: o ? não corresponde realmente a digit , meu erro. De man zshexpn :

?      Matches any character.
    
por 06.01.2013 / 04:38
0

Estou mais familiarizado com o bash do que com o zsh, mas isso deve funcionar em:

# zsh's declare (/typeset) command doesn't allow arrays to be assigned as
# they're declared. Actually, arrays don't really have to be declared, you can
# just create them by assigning an array value; but for completeness...
declare -a files
# Comments aren't recognized inside an array declaration, so leave them out
files=(
    "$HOME/.dotfiles/bash/exports"
    "$HOME/.dotfiles/bash/aliases"
    "$HOME/.dotfiles/bash/functions"
    "$HOME/.z.sh"
    "$NVM_HOME/nvm.sh"
    "$ZSH/oh-my-zsh.sh"
)

# If these files are readable, source them
# Note: rather than iterating over a list of array indexes and using them to
# pull out the array elements, I've switched this to iterating over the array
# elements directly. It's simpler, and works the same in both bash and zsh.
for file in "${files[@]}"
do
    if [ -r "$file" ]; then
        # Note that if any of the files have bashisms, they may break in zsh
        source "$file"
    fi
done

unset files
    
por 06.01.2013 / 02:50

Tags