2

Я скопировал этот код откуда-то и пытаюсь изменить его для своих нужд. Он был разработан для bash но я запускаю его под zsh .

У меня всегда возникают проблемы с запуском скриптов bash под zsh, так как между этими двумя языками, кажется, довольно много различий (?). Кто-нибудь может сказать мне, что мне нужно изменить здесь, чтобы он работал с 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

2 ответа2

1

Вот ~/.zshrc который содержит множество других файлов:

# 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

Это будет source файлы в ~/.zshrc.d/ которые имеют имя файла, начинающееся с 3-значного числа (например, 421-Name.zsh).

Преимущество этого метода в том, что он позволяет вам иметь один каталог (~/.zshrc.d/), содержащий все ваши скрипты запуска. Затем вы можете добавить / удалить из этого каталога, не трогая несколько файлов (вам не нужно редактировать ~/.zshrc каждый раз, когда вы добавляете скрипт).

Чтобы изменить имена файлов, отредактируйте эту строку:

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

Каталог, который он ищет, ~/.zshrd.d/ . Если вам не нужен трехзначный префикс, удалите ???- . Расширение (.z) также можно изменить здесь.

? на самом деле не соответствует digit , моя ошибка. От man zshexpn:

?      Matches any character.
0

Я больше знаком с bash, чем с zsh, но это должно сработать либо:

# 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .