Mengubah bash ke zsh: menyatakan fungsi dan pernyataan if

2

Saya telah menyalin kode ini dari suatu tempat dan saya mencoba memodifikasinya untuk kebutuhan saya. Itu dirancang untuk bash tapi saya menjalankannya di bawah zsh.

Saya selalu mengalami kesulitan menjalankan skrip bash di bawah zsh, karena tampaknya ada beberapa perbedaan antara kedua bahasa (?). Adakah yang bisa memberi tahu saya apa yang perlu saya modifikasi di sini agar berfungsi 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
Oliver Joseph Ash
sumber

Jawaban:

1

Ini dia Sebuah ~/.zshrc yang sumber banyak file lain:

# 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

Ini akan source file dalam ~/.zshrc.d/ yang memiliki nama file yang diawali dengan angka 3 digit (misalnya, 421-Name.zsh ).

Keuntungan dari metode ini adalah ia memungkinkan Anda untuk memiliki satu direktori ( ~/.zshrc.d/ ) berisi semua skrip startup Anda. Anda kemudian dapat menambah / menghapus dari direktori itu tanpa harus menyentuh banyak file (Anda tidak perlu mengedit ~/.zshrc setiap kali Anda menambahkan skrip).

Untuk mengubah nama file, edit baris ini:

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

Direktori yang dicari adalah ~/.zshrd.d/. Jika Anda tidak ingin awalan 3 digit, hapus ???-. Ekstensi ( .z ) juga dapat diubah di sini.

Catatan: ? sebenarnya tidak cocok dengan digit, kesalahanku. Dari man zshexpn:

?      Matches any character.
simont
sumber
Ini terlihat bagus! Bagaimana jika saya tidak ingin memiliki persyaratan awalan 3 digit?
Oliver Joseph Ash
@OliverJosephAsh Menambahkan komentar ke jawabannya.
simont
0

Saya lebih terbiasa dengan bash daripada zsh, tetapi ini seharusnya bisa digunakan di:

# 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
Gordon Davisson
sumber