คุณ“ ปิดการใช้งาน” oh-my-zsh (และ zsh) โดยไม่ถอนการติดตั้งได้อย่างไร?


16

ฉันกำลังลองสภาพแวดล้อม dev ใหม่ ๆ รวมถึง zsh และ oh-my-zsh ตอนนี้ฉันได้ติดตั้ง oh-my-zsh แล้วมันเริ่มต้นตามค่าเริ่มต้นที่เทอร์มินัลของฉัน (iTerm2 และเทอร์มินัล) เริ่มต้นด้วย zsh เสมอและด้วยการตั้งค่าจาก oh-my-zsh ฉันสงสัยว่ามันเป็นไปได้ที่จะ "ปิดการใช้งาน" หรือหยุดใช้ zsh และการตั้งค่าด้วย oh-my-zsh โดยไม่ต้องถอนการติดตั้ง oh-my-zsh? นอกจากนี้ยังเป็นการดีที่จะทราบวิธีการเปิดใช้งานผลิตภัณฑ์เหล่านั้นด้วย

ปัจจุบันเทอร์มินัลของฉันไปที่ zsh โดยอัตโนมัติ (ฉันคิดว่า) และใช้ oh-my-zsh โดยอัตโนมัติ ฉันต้องการควบคุมมากกว่านั้นและฉันสามารถควบคุมทั้งสองได้เมื่อใช้ zsh และเมื่อใช้คุณสมบัติ oh-my-zsh

สิ่งหนึ่งที่ฉันสนใจในการรู้ก็คือแอปพลิเคชันเทอร์มินัลรู้ได้อย่างไรว่าเชลล์ใดที่จะเริ่มทำงานเมื่อเริ่มต้น นั่นจะเป็นการดีที่สามารถควบคุมได้เช่นกัน!

หากคุณอธิบายให้มากที่สุดเท่าที่จะทำได้ใน "ทำไม" ของทุกคำสั่งที่คุณให้ฉันนั่นจะเป็นประโยชน์! :)


ฉันใช้งานบน OS X ไม่แน่ใจว่ามีความสำคัญหรือไม่ แต่ฉันมักจะชอบคำตอบที่มากกว่าสำหรับสภาพแวดล้อม Unix ทั่วไปมากกว่าสำหรับฉัน


คุณต้องการหยุดใช้zshหรือไม่ หรือoh-my-zsh? ที่?
strugee

ทั้งและทั้งสอง เช่นฉันต้องการควบคุมทั้งสองอย่างเมื่อฉันใช้ zsh และ oh-my-zsh
Charlie Parker

คำตอบ:


19

ถ้อยคำของคำถามของคุณไม่ชัดเจนดังนั้นผมจึงไม่สามารถบอกได้ว่าคุณหมายความว่าคุณต้องการที่จะหยุดการใช้หรือคุณต้องการที่จะหยุดการใช้zsh oh-my-zshฉันจะครอบคลุมทั้งสองอย่าง

ปิดการใช้งาน zsh

เพียงแค่เรียกใช้chshและเลือกสิ่งที่เปลือกหอยคุณเคยใช้มาก่อน bashหากคุณไม่ได้รู้ว่าสิ่งที่เปลือกคุณกำลังใช้ก่อนเป็นเกือบแน่นอน คำสั่งนี้เปลี่ยน "ล็อกอินเชลล์" ที่เชื่อมโยงกับผู้ใช้ของคุณ เป็นหลักมันเปลี่ยนเปลือกเริ่มต้นของคุณ

คุณจะต้องเปิดหน้าต่างเทอร์มินัลใหม่เพื่อให้การเปลี่ยนแปลงมีผล หากวิธีนี้ใช้ไม่ได้ผลคุณจะต้องออกจากระบบและลงชื่อเข้าใช้อีกครั้งเพื่อเริ่มสภาพแวดล้อมของคุณใหม่

ปิดการใช้งานเท่านั้น oh-my-zsh

  1. ตรวจสอบว่า~/.zshrc.pre-oh-my-zshมีอยู่ มันอาจจะเป็น (ไฟล์นี้จะได้รับการสร้างขึ้นเมื่อoh-my-zshสคริปต์การติดตั้งย้ายก่อนหน้าของคุณ.zshrcออกจากทาง. .zshrcเป็นไฟล์เริ่มต้นของzshคล้ายกับ.bashrcสำหรับbash.)
  2. mv ~/.zshrc ~/.zshrc.oh-my-zshถ้าไม่ทำ นี้จะทำให้oh-my-zshสร้างแล้วออกจากทางเพื่อให้เราสามารถเรียกคืนต้นฉบับด้วยการทำ.zshrcmv ~/.zshrc.pre-oh-my-zsh ~/.zshrc
  3. หากไม่มีอยู่ให้เปิด~/.zshrcในโปรแกรมแก้ไขข้อความ ค้นหาบรรทัดที่ระบุว่าsource $ZSH/.oh-my-zshและแสดงความคิดเห็นหรือลบออก oh-my-zshนี้จะปิดการใช้งานเริ่มต้นของ

คุณจะต้องรีสตาร์ทเชลล์เพื่อให้การเปลี่ยนแปลงมีผล


ฉันขอโทษเกี่ยวกับถ้อยคำของฉัน ฉันเชื่อว่าฉันชี้แจง ชัดเจนหรือไม่ ขอบคุณ btw
Charlie Parker

@ CharlieParker ใช่ฉันเป็นคนขี้เกียจ ฉันจะขยายคำตอบอาจอธิบายได้เล็กน้อยว่า "ทำไม"
strugee

1
@CharlieParker ในกรณีที่คุณไม่ได้สังเกตเห็นฉันอัปเดตคำตอบนี้ แจ้งให้เราทราบหากมีสิ่งใดที่สามารถปรับปรุงได้
strugee

4

กำหนดค่าการสลับ ZSH

หากคุณต้องการที่จะทดสอบกรอบการกำหนดค่าที่แตกต่างกัน zsh (OH-My-zsh, zprezto ฯลฯ ) และสวิทช์ระหว่างพวกเขาทางออกที่ดีที่สุดของคุณใช้การเชื่อมโยงสัญลักษณ์สำหรับ~/.zsh, ~/.zshrc, ~/.zlogin, ~/.zlogout, และ~/.zprofile ~/.zshenvคุณอาจต้องการสร้างเชลล์สคริปต์สำหรับแต่ละเฟรมเวิร์กเพื่อสร้าง symlink เหล่านั้นเพื่อการสลับที่เร็วขึ้น

ใส่การกำหนดค่ากรอบงานของคุณในโฟลเดอร์ของตนเอง สำหรับแต่ละเฟรม

  • ติดตั้งเฟรมเวิร์กในโฟลเดอร์ของตัวเองถ้าเป็นไปได้
  • หากเฟรมเวิร์กบังคับให้ติดตั้ง~/.zshแล้ว
    • ปกป้องปัจจุบัน~/.zshก่อน ทั้ง
      • ลบ~/.zshsymlink 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นั้นไม่ใช่โปรแกรมที่ถูกต้อง ดังนั้นคุณสามารถล็อคตัวเองออกจากบัญชีของคุณหากคุณไม่ระวัง เช่น~/.shellsymlink ของคุณไม่ทำงานหรือไม่ได้ชี้ไปที่โปรแกรมแบบโต้ตอบ คุณสามารถลองด้วยบัญชีผู้ใช้ แต่นี่ไม่ใช่การแนะนำสำหรับ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

3

chsh -s / bin / bash

หากต้องการตั้งค่าเชลล์เริ่มต้นใหม่ด้วยตนเองให้ทำ chsh -s / my / new / shell เช่น chsh -s / bin / bash จากนั้นก็เปิดเปลือกของคุณอีกครั้ง


2

คุณสามารถบอก zsh ให้โหลดไฟล์กำหนดค่าต่อผู้ใช้จากไดเรกทอรีอื่นโดยการตั้งค่าตัวแปรสภาพแวดล้อมZDOTDIRก่อนเริ่ม zsh

หากคุณต้องการเริ่ม zsh โดยไม่โหลดไฟล์กำหนดค่าของคุณให้ตั้งค่าZDOTDIRเป็นไดเรกทอรีที่ไม่มีอยู่จริง หากคุณต้องการที่จะข้ามไฟล์การกำหนดค่าระบบ (นอกเหนือจาก/etc/zshenv) zsh -fคุณสามารถเรียกใช้ หากคุณต้องการที่จะข้ามไฟล์การกำหนดค่าระบบ zsh -dแต่เรียกใช้ไฟล์ต่อผู้ใช้เรียกใช้

ตัวอย่างเช่นหากคุณต้องการทดสอบไดรฟ์ oh-my-zsh โดยไม่ทำให้เป็นค่าเริ่มต้นอย่าใส่.zshrcจาก oh-my-zsh ในโฮมไดเร็กตอรี่ของคุณ ให้วางไว้ที่อื่นแทน ใน~/.oh-my-zshแล้วเรียกใช้ZDOTDIR=~/.oh-my-zsh zshเมื่อคุณต้องการใช้ oh-my-zsh


แอปพลิเคชันเทอร์มินัลรันเชลล์ที่ระบุโดยSHELLตัวแปรสภาพแวดล้อม หากตัวแปรนี้ไม่มีการตั้งค่าพวกเขาจะรันเชลล์ล็อกอินที่ระบุในฐานข้อมูลผู้ใช้ ( /etc/passwd) คุณสามารถขอใบสมัครที่แตกต่างกันเมื่อคุณเริ่มจำลอง terminal xterm -e fishเช่น


0

เนื่องจากเป็นบิตที่ซ่อนอยู่ใน @Gilles ตอบวิธีที่รวดเร็วในการโหลด zsh โดยไม่ต้องตั้งค่าใด ๆ เช่น. zshrc .zshenv เป็นต้น

zsh -f

สิ่งนี้มีประโยชน์เมื่อคุณต้องการทดสอบว่ามีอะไรในการกำหนดค่าของคุณป้องกันไม่ให้คุณสมบัติบางอย่างของ zsh ทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.