Bagaimana Anda "menonaktifkan" oh-my-zsh (dan zsh) tanpa menghapus instalannya?

16

Saya sedang mencoba lingkungan dev baru termasuk zsh dan oh-my-zsh. Sekarang saya telah menginstal oh-my-zsh, dimulai secara default pada terminal saya (iTerm2 dan terminal) selalu dimulai dengan zsh dan dengan pengaturan aktif dari oh-my-zsh. Saya bertanya-tanya apakah mungkin untuk "menonaktifkan" atau berhenti menggunakan zsh dan pengaturannya dengan oh-my-zsh tanpa harus menghapus instalasi oh-my-zsh? Akan menyenangkan juga mengetahui cara mengaktifkannya kembali.

Saat ini, terminal saya masuk ke zsh secara otomatis (saya pikir) dan menggunakan oh-my-zsh secara otomatis. Saya ingin memiliki lebih banyak kontrol atas itu dan saya dapat mengontrol keduanya, ketika zsh sedang digunakan dan ketika fitur oh-my-zsh sedang digunakan.

Satu hal yang saya juga tertarik untuk mengetahuinya adalah, bagaimana aplikasi terminal mengetahui shell mana untuk mulai berjalan saat start up. Itu akan bagus untuk bisa mengendalikan juga!

Jika Anda menjelaskan sebanyak mungkin tentang "mengapa" dari setiap perintah yang Anda berikan kepada saya, itu akan berguna! :)


Saya menggunakan OS X. Tidak yakin apakah itu penting, tetapi saya cenderung lebih menyukai jawaban yang lebih berlaku untuk lingkungan Unix yang lebih umum daripada untuk lingkungan saya.

Charlie Parker
sumber
Anda ingin berhenti menggunakan zsh? atau oh-my-zsh? yang?
strugee
salah satu dan keduanya. yaitu saya ingin dapat mengendalikan keduanya, ketika saya menggunakan zsh dan oh-my-zsh
Charlie Parker

Jawaban:

19

Kata-kata dari pertanyaan Anda tidak jelas, jadi saya tidak tahu apakah Anda ingin berhenti menggunakan zshatau ingin berhenti menggunakannya oh-my-zsh. Saya akan membahas keduanya.

Menonaktifkan zsh

Cukup jalankan chshdan pilih shell apa pun yang Anda gunakan sebelumnya. Jika Anda tidak tahu shell apa yang Anda gunakan sebelumnya, itu hampir pasti bash. Perintah ini mengubah "shell login" yang dikaitkan dengan pengguna Anda. Pada dasarnya, ini mengubah shell default Anda.

Anda harus membuka jendela terminal baru agar perubahan diterapkan. Jika ini tidak berhasil, Anda harus keluar dan masuk lagi untuk menginisialisasi ulang lingkungan Anda.

Hanya menonaktifkan oh-my-zsh

  1. Periksa apakah ~/.zshrc.pre-oh-my-zshada. Mungkin memang begitu. (File ini akan dibuat ketika oh-my-zshskrip instalasi memindahkan sebelumnya .zshrcdari Anda. .zshrcAdalah file startup zsh, mirip dengan .bashrcuntuk bash.)
  2. Jika ya, lakukan mv ~/.zshrc ~/.zshrc.oh-my-zsh. Ini akan membuat oh-my-zsh-created .zshrckeluar dari jalan, sehingga kita dapat mengembalikan yang asli, dengan melakukan mv ~/.zshrc.pre-oh-my-zsh ~/.zshrc.
  3. Jika tidak ada, buka ~/.zshrcdi editor teks. Temukan baris yang mengatakan source $ZSH/.oh-my-zshdan berikan komentar atau hapus. Ini akan menonaktifkan inisialisasi oh-my-zsh.

Anda harus memulai ulang shell Anda agar perubahan diterapkan.

strugee
sumber
Saya minta maaf tentang kata-kata saya. Saya percaya saya mengklarifikasi itu. Apakah sudah jelas sekarang? Terima kasih btw.
Charlie Parker
@CharlieParker ya, saya malas. Saya akan memperluas jawabannya, mungkin menjelaskan sedikit tentang "mengapa".
strugee
1
@CharlieParker jika Anda tidak melihat, saya memperbarui jawaban ini. beri tahu saya jika ada yang bisa diperbaiki.
strugee
4

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. misalnyamv ~/.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/passwdbukan program yang valid. Jadi, Anda dapat mengunci diri dari akun jika tidak hati-hati; yaitu ~/.shellsymlink Anda rusak atau tidak mengarah ke program interaktif. Anda boleh mencoba ini dengan akun pengguna, tetapi ini TIDAK DIANJURKAN untuk rootakun 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
Justin C
sumber
3

chsh -s / bin / bash

Untuk secara manual mengatur shell default baru, lakukan chsh -s / my / new / shell, misal chsh -s / bin / bash. Maka cukup buka kembali cangkang Anda.

Honghui Li
sumber
2

Anda dapat memberitahu zsh untuk memuat file konfigurasi per-pengguna dari direktori yang berbeda dengan mengatur variabel lingkungan ZDOTDIRsebelum memulai zsh.

Jika Anda ingin memulai zsh tanpa memuat file konfigurasi Anda, setel ZDOTDIRke direktori yang tidak ada. Jika Anda ingin melewati file konfigurasi sistem (terpisah dari /etc/zshenv), Anda dapat menjalankannya zsh -f. Jika Anda ingin melewati file konfigurasi sistem tetapi menjalankan file per-pengguna, jalankanzsh -d .

Misalnya, jika Anda ingin menguji-drive oh-my-zsh tanpa menjadikannya default, jangan masukkan .zshrcdari oh-my-zsh di direktori home Anda. Sebagai gantinya, letakkan di tempat lain, mis. di ~/.oh-my-zsh, dan kemudian jalankan ZDOTDIR=~/.oh-my-zsh zshketika Anda ingin menggunakan oh-my-zsh.


Aplikasi terminal menjalankan shell yang ditunjukkan oleh SHELLvariabel lingkungan. Jika variabel ini tidak disetel, mereka menjalankan shell login yang ditunjukkan dalam database pengguna ( /etc/passwd). Anda dapat meminta aplikasi lain saat memulai emulator terminal, mis xterm -e fish.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
0

Karena agak tersembunyi di @Gilles, jawab cara cepat untuk memuat zsh tanpa konfigurasi misalnya .zshrc .zshenv dll

zsh -f

Ini berguna ketika Anda ingin menguji apakah ada sesuatu dalam konfigurasi Anda yang mencegah beberapa fitur zsh bekerja.

zzapper
sumber