Come si "disabilita" oh-my-zsh (e zsh) senza disinstallarlo?


16

Stavo provando nuovi ambienti di sviluppo tra cui zsh e oh-my-zsh. Ora che ho installato oh-my-zsh, si avvia di default sui miei terminali (iTerm2 e terminale) che inizia sempre con zsh e con le impostazioni su oh-my-zsh. Mi chiedevo se fosse possibile "disabilitare" o smettere di usare zsh e la sua configurazione con oh-my-zsh senza dover disinstallare oh-my-zsh? Sarebbe anche bello sapere come riaccenderli.

Attualmente, i miei terminali entrano automaticamente in zsh (penso) e usano automaticamente oh-my-zsh. Voglio avere un maggiore controllo su questo e io sono in grado di controllare entrambi, quando viene utilizzato zsh e quando vengono utilizzate le funzionalità oh-my-zsh.

Una cosa che mi interessa anche sapere è: come fanno le applicazioni terminali a sapere quale shell iniziare a funzionare all'avvio. Sarebbe bello poter controllare anche tu!

Se spieghi il più possibile il "perché" di ogni comando che mi dai, sarebbe utile! :)


Sono su OS X. Non sono sicuro che sia importante, ma tendo a preferire le risposte più applicabili agli ambienti Unix più generali piuttosto che ai miei.


vuoi smettere di usare zsh? o oh-my-zsh? quale?
Strugee,

entrambi e entrambi. cioè voglio essere in grado di controllare entrambi, quando sto usando zsh e oh-my-zsh
Charlie Parker,

Risposte:


19

La formulazione della tua domanda è ambigua, quindi non posso dire se vuoi dire che vuoi smettere di usare zsho che vuoi smettere di usare oh-my-zsh. Tratterò entrambi.

Disattivazione zsh

Basta eseguire chshe selezionare qualsiasi shell che stavi usando prima. Se non sai quale shell stavi usando prima, è quasi certamente bash. Questo comando modifica la "shell di accesso" associata al tuo utente. In sostanza, cambia la shell predefinita.

Sarà necessario aprire una nuova finestra del terminale affinché le modifiche abbiano effetto. Se il problema persiste, sarà necessario disconnettersi e riconnettersi per reinizializzare il proprio ambiente.

Solo disabilitazione oh-my-zsh

  1. Controlla se ~/.zshrc.pre-oh-my-zshesiste. Probabilmente lo fa. (Questo file sarà stato creato quando lo oh-my-zshscript di installazione ha spostato il precedente .zshrcin precedenza . .zshrcÈ un file di avvio di zsh, simile a .bashrcper bash.)
  2. Se lo fa, fallo mv ~/.zshrc ~/.zshrc.oh-my-zsh. Ciò oh-my-zsheliminerà il creato .zshrc, in modo da poter ripristinare l'originale, facendo mv ~/.zshrc.pre-oh-my-zsh ~/.zshrc.
  3. Se non esiste, aprire ~/.zshrcin un editor di testo. Trova la riga che dice source $ZSH/.oh-my-zshe commentalo o rimuovilo. Questo disabiliterà l'inizializzazione di oh-my-zsh.

Sarà necessario riavviare la shell per rendere effettive le modifiche.


Mi scuso per le mie parole. Credo di averlo chiarito. È chiaro adesso? Grazie a proposito.
Charlie Parker,

@CharlieParker sì, ero pigro. Espanderò la risposta, forse spiegherò un po 'del "perché".
Strugee,

1
@CharlieParker nel caso non l'avessi notato, ho aggiornato questa risposta. fatemi sapere se qualcosa può essere migliorato.
Strugee,

4

Cambio di configurazione ZSH

Se si desidera testare diversi quadri di configurazione zsh (oh-my-zsh, zprezto, ecc) e passare tra di loro, la cosa migliore è usare i link simbolici per ~/.zsh, ~/.zshrc, ~/.zlogin, ~/.zlogout, ~/.zprofile, e ~/.zshenv. È possibile che si desideri creare uno script di shell per ciascun framework per creare quei collegamenti simbolici per un passaggio più rapido.

Inserisci le tue configurazioni di framework nelle loro cartelle. Per ogni quadro.

  • Se possibile, installare il framework nella propria cartella, altrimenti
  • Se il framework forza l'installazione ~/.zsh, allora
    • Proteggi ~/.zshprima la corrente . O
      • rimuovere il ~/.zshcollegamento simbolico; rm ~/.zsh, o
      • sposta la ~/.zshcartella;mv ~/.zsh ~/.zsh.backup
    • Esegui il programma di installazione del framework.
    • Spostare la cartella del framework nella propria directory. es mv ~/.zsh ~/.oh-my-zsh.
  • Ripetere l'operazione per ciascun framework.

Al termine, creare uno script di shell per ciascun framework per creare i collegamenti simbolici necessari. Ecco un esempio di zprezto, poiché lo uso già.

$ 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

Questo script è abbastanza semplice e si basa sul fatto che tutti i miei collegamenti simbolici sono organizzati con lo stesso schema. Puoi copiare e incollare la rimozione e creare linee dopo il ciclo per i collegamenti simbolici che non seguono il modello.

Una volta fatto, usare ~/bin/use-zprezto--o - ~/bin/use-whateverper alternare tra i framework zsh.

Si noti che le modifiche hanno effetto solo nelle nuove shell zsh, non nelle shell esistenti.

Cambio di shell

È un po 'pericoloso, ma se sei così incline, puoi usare un collegamento simbolico per il comando della shell e impostare il collegamento simbolico come shell predefinita. È quindi possibile seguire il use-*metodo di script sopra per modificare la shell predefinita.

Ad esempio con 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

Il motivo per cui questo è pericoloso è che non è possibile accedere con un utente se la shell memorizzata /etc/passwdnon è un programma valido. Quindi puoi bloccarti fuori dal tuo account se non stai attento; cioè il tuo ~/.shelllink simbolico è rotto o non punta a un programma interattivo. Puoi provare questo con un account utente, ma NON È CONSIGLIATO per il tuo rootaccount.

Se vuoi ancora continuare, allora

$ ~/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

Per impostare manualmente una nuova shell predefinita, fai chsh -s / my / new / shell, ad esempio chsh -s / bin / bash. Quindi riapri semplicemente le tue conchiglie.


2

Puoi dire a zsh di caricare i suoi file di configurazione per utente da una directory diversa impostando la variabile d'ambiente ZDOTDIRprima di avviare zsh.

Se si desidera avviare zsh senza caricare i file di configurazione, impostare ZDOTDIRsu una directory inesistente. Se si desidera saltare i file di configurazione del sistema (a parte /etc/zshenv), è possibile eseguire zsh -f. Se si desidera saltare i file di configurazione del sistema ma eseguire i file per utente, eseguire zsh -d.

Ad esempio, se si desidera testare drive oh-my-zsh senza renderlo predefinito, non inserire .zshrcda oh-my-zsh nella propria directory home. Invece, mettilo altrove, ad es. in ~/.oh-my-zsh, quindi esegui ZDOTDIR=~/.oh-my-zsh zshquando vuoi usare oh-my-zsh.


Le applicazioni terminali eseguono la shell indicata dalla SHELLvariabile d'ambiente. Se questa variabile non è impostata, eseguono la shell di accesso indicata nel database utente ( /etc/passwd). È possibile richiedere un'applicazione diversa quando si avvia un emulatore di terminale, ad es xterm -e fish.


0

Poiché è un po 'nascosto in @Gilles, rispondi al modo rapido di caricare zsh senza alcuna configurazione, ad es. .Zshrc .zshenv ecc.

zsh -f

Ciò è utile quando si desidera verificare se qualcosa nella propria configurazione impedisce il funzionamento di alcune funzionalità di zsh.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.