ZSH Config Switching
Jika Anda ingin menguji berbagai kerangka kerja konfigurasi zsh (oh-my-zsh, zprezto, dll) dan beralih di antara mereka, taruhan terbaik Anda adalah menggunakan tautan simbolis untuk~/.zsh
, ~/.zshrc
, ~/.zlogin
, ~/.zlogout
, ~/.zprofile
, dan ~/.zshenv
. Anda mungkin ingin membuat skrip shell untuk setiap kerangka kerja untuk membuat symlink tersebut untuk peralihan yang lebih cepat.
Tempatkan konfigurasi kerangka Anda di folder mereka sendiri. Untuk setiap kerangka kerja.
- Instal kerangka kerja di foldernya sendiri jika memungkinkan, jika tidak
- Jika kerangka kerja memaksa instalasi
~/.zsh
, maka
- Lindungi arus
~/.zsh
terlebih dahulu. Antara
- Hapus
~/.zsh
symlink; rm ~/.zsh
, atau
- memindahkan
~/.zsh
folder;mv ~/.zsh ~/.zsh.backup
- Jalankan installer kerangka kerja.
- Pindahkan folder framework ke direktori sendiri. misalnya
mv ~/.zsh ~/.oh-my-zsh
.
- Ulangi untuk setiap framework.
Setelah selesai, buat skrip shell untuk setiap kerangka kerja untuk membuat symlink yang diperlukan. Inilah contoh untuk zprezto, karena saya sudah menggunakannya.
$ mkdir ~/bin
$ cat <<EOF > ~/bin/use-zprezto
#!/bin/bash
SYMLINKS=".zsh .zshrc .zshlogin .zshlogout .zshprofile .zpreztorc .zshenv .zshrc"
CONFIG_HOME="$HOME/.zprezto"
# check for unexpected error conditions
for sym in $SYMLINKS; do
# report an error and quit if $sym exists and is not a symlink
[[ -e "$HOME/$sym" -a ! -h "$HOME/$sym" ]] && { echo "error: '$HOME/$sym' is not a symlink!"; return 1; }
done
# now create the symlinks now that nothing should go wrong
for sym in $SYMLINKS; do
# remove old symlink if it exists
[[ -h "$HOME/$sym" ]] && rm -f "$HOME/$sym"
# create new symlink
ln -s "$CONFIG_HOME/$sym" "$HOME/$sym"
done
# uncomment next line to start a new zsh shell. CAUTION: each call is a zsh shell inside a zsh shell. Too many calls will put you in limbo :D
#/usr/bin/env zsh
EOF
$ chmod 700 ~/bin/use-zprezto
Skrip ini cukup sederhana dan bergantung pada kenyataan bahwa semua symlink saya diatur dengan pola yang sama. Anda dapat menyalin & menempelkan hapus dan buat garis setelah loop untuk symlink yang Anda miliki yang tidak mengikuti pola.
Setelah selesai, gunakan ~/bin/use-zprezto
--atau~/bin/use-whatever
beralih di antara kerangka kerja zsh.
Perhatikan bahwa perubahan hanya berlaku di shell zsh baru, bukan shell yang ada.
Shell Switching
Ini agak berbahaya, tetapi jika Anda cenderung, Anda dapat menggunakan symlink untuk perintah shell Anda dan mengatur symlink sebagai shell default Anda. Anda kemudian dapat mengikutiuse-*
metode skrip di atas untuk mengubah shell default Anda.
Sebagai contoh dengan zsh ...
$ mkdir ~/bin
$ cat <<EOF > ~/bin/use-zsh
#!/bin/bash
# check for valid shell symlink
if [[ ! -h "$HOME/.shell" ]]; then
echo "error: $HOME/.shell is not a symlink!"
return 1
fi
# remove existing shell symlink if it exists
[[ -h "$HOME/.shell" ]] && rm -f "$HOME/.shell"
# create new shell symlink, but warn user if this fails!
if ! ln -s /usr/bin/zsh "$HOME/.shell"; then
echo "ERROR: failed to create $HOME/.shell symlink. Manually create the symlink or future logins will fail!."
return 2
fi
EOF
$ chmod 700 ~/bin/use-zsh
Alasannya berbahaya adalah karena Anda tidak dapat masuk di bawah pengguna jika shell yang disimpan di dalam /etc/passwd
bukan program yang valid. Jadi, Anda dapat mengunci diri dari akun jika tidak hati-hati; yaitu ~/.shell
symlink Anda rusak atau tidak mengarah ke program interaktif. Anda boleh mencoba ini dengan akun pengguna, tetapi ini TIDAK DIANJURKAN untuk root
akun Anda .
Jika Anda masih ingin melanjutkan, maka
$ ~/bin/use-zsh # ensures ~/.shell exists for chsh
$ echo "$HOME/.shell | sudo tee -a /etc/shells # add symlink to system's list of valid shells
$ chsh -s ~/.shell # changes default shell in /etc/passwd for $USER
zsh
? atauoh-my-zsh
? yang?