กำหนดค่าการสลับ ZSH
หากคุณต้องการที่จะทดสอบกรอบการกำหนดค่าที่แตกต่างกัน zsh (OH-My-zsh, zprezto ฯลฯ ) และสวิทช์ระหว่างพวกเขาทางออกที่ดีที่สุดของคุณใช้การเชื่อมโยงสัญลักษณ์สำหรับ~/.zsh
, ~/.zshrc
, ~/.zlogin
, ~/.zlogout
, และ~/.zprofile
~/.zshenv
คุณอาจต้องการสร้างเชลล์สคริปต์สำหรับแต่ละเฟรมเวิร์กเพื่อสร้าง symlink เหล่านั้นเพื่อการสลับที่เร็วขึ้น
ใส่การกำหนดค่ากรอบงานของคุณในโฟลเดอร์ของตนเอง สำหรับแต่ละเฟรม
- ติดตั้งเฟรมเวิร์กในโฟลเดอร์ของตัวเองถ้าเป็นไปได้
- หากเฟรมเวิร์กบังคับให้ติดตั้ง
~/.zsh
แล้ว
- ปกป้องปัจจุบัน
~/.zsh
ก่อน ทั้ง
- ลบ
~/.zsh
symlink rm ~/.zsh
, หรือ
- ย้าย
~/.zsh
โฟลเดอร์;mv ~/.zsh ~/.zsh.backup
- เรียกใช้ตัวติดตั้งเฟรมเวิร์ก
- ย้ายโฟลเดอร์เฟรมเวิร์กไปยังไดเร็กทอรีของตัวเอง
mv ~/.zsh ~/.oh-my-zsh
เช่น
- ทำซ้ำสำหรับแต่ละเฟรมเวิร์ก
เมื่อเสร็จแล้วให้สร้างเชลล์สคริปต์สำหรับแต่ละเฟรมเวิร์กเพื่อสร้าง symlink ที่จำเป็น นี่คือตัวอย่างสำหรับ zprezto เนื่องจากฉันใช้แล้ว
$ 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
สคริปต์นี้ค่อนข้างเรียบง่ายและอาศัยข้อเท็จจริงที่ว่า symlink ของฉันทั้งหมดได้รับการจัดวางในรูปแบบเดียวกัน คุณสามารถคัดลอกและวางการลบและสร้างบรรทัดหลังจากวนรอบสำหรับ symlink ที่คุณมีซึ่งไม่เป็นไปตามรูปแบบ
เมื่อเสร็จแล้วให้ใช้~/bin/use-zprezto
- หรือ~/bin/use-whatever
- เพื่อสลับระหว่างเฟรมเวิร์ก zsh
โปรดทราบว่าการเปลี่ยนแปลงจะมีผลเฉพาะกับเชลล์ zsh ใหม่ไม่ใช่เชลล์ที่มีอยู่
การสับเปลี่ยนเชลล์
มันค่อนข้างอันตราย แต่ถ้าคุณเอียงมากคุณสามารถใช้ symlink สำหรับคำสั่งเชลล์ของคุณและตั้ง symlink เป็นเชลล์เริ่มต้นของคุณ จากนั้นคุณสามารถทำตามuse-*
วิธีสคริปต์ด้านบนเพื่อเปลี่ยนเชลล์เริ่มต้นของคุณ
เป็นตัวอย่างกับ 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
สาเหตุที่เป็นอันตรายคือคุณไม่สามารถเข้าสู่ระบบภายใต้ผู้ใช้หากเชลล์ที่เก็บไว้ใน/etc/passwd
นั้นไม่ใช่โปรแกรมที่ถูกต้อง ดังนั้นคุณสามารถล็อคตัวเองออกจากบัญชีของคุณหากคุณไม่ระวัง เช่น~/.shell
symlink ของคุณไม่ทำงานหรือไม่ได้ชี้ไปที่โปรแกรมแบบโต้ตอบ คุณสามารถลองด้วยบัญชีผู้ใช้ แต่นี่ไม่ใช่การแนะนำสำหรับroot
บัญชีของคุณ
หากคุณยังต้องการดำเนินการต่อไป
$ ~/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
หรือไม่ หรือoh-my-zsh
? ที่?