zsh con Cygwin


Risposte:


45

A meno che non utilizzi cygwin come ambiente multiutente (nel qual caso utilizzalo chshcome faresti in un ambiente standard).

Altrimenti, basta cambiare cygwin.bat per l'esecuzione zsh -l -iinvece che bash --login -ie funzionerà come shell di login.  

Naturalmente, se si desidera eseguire più shell all'avvio, è sufficiente creare un set di .batfile per caricare shell diverse. ( sh, ksh, csh, fishEcc)

Aggiornare...

Ho sentito che avrei dovuto aggiornarlo per fornire informazioni su come farlo senza, chshma comunque farlo alla fine di Unix. Modifica il /etc/passwdfile e sostituisci le occorrenze di /bin/bashcon /bin/zsh. (Questo è effettivamente ciò che chshfarebbe, ma in questo modo lo faresti per tutti gli utenti in una volta sola.)


15
Di default non c'è più un / etc / passwd in cygwin e chsh non è più supportato. Questa risposta non aiuta (10 aprile 2014).
Jeff Snider,

Vai a casa @THESorcerer sei ubriaco
ocodo

2
@JeffSnider esegue mkpasswd -l -p "$(cygpath -H)" > /etc/passwde modifica il /etc/passwdfile appena creato
BrunoLM

17

Se leggo bene la tua domanda, stai cercando qualcos'altro oltre a ciò che fornisce Chere (che, garantito, è piuttosto bello a sé stante).

La versione corrente di Cygwin non ha un file / etc / passwd e il sistema su cui sto lavorando ha le informazioni sull'account di Windows in un database di dominio fuori dal mio controllo. Di conseguenza, chsh non è più supportato.

Ho anche scoperto che bash non è codificato nello script startxwin , né è codificato in alcun file .bat. Si scopre che non è necessario giocherellare con i file .bat.

Cercando come cambiare la mia shell, ho trovato alcuni consigli su mkpasswd

L'ho aggiunto al mix.

La pagina di manuale diceva:

SYNOPSIS
   mkpasswd [OPTIONS]...

OPTIONS
   Don't use this command to generate a local /etc/passwd file, unless you
   really need one.  See the Cygwin User's Guide for more information.

   -c,--current
          Print current user.

  DESCRIPTION
        The   mkpasswd  program can be used to create a        /etc/passwd
   file.  Cygwin doesn't need  this  file,        because  it  reads  user
   information  from  the Windows account databases,       but you can add
   an  /etc/passwd file, for instance       if your machine is often  dis‐
   connected from its domain controller.

        Note  that this information is static, in contrast to the informa‐
   tion       automatically gathered by Cygwin from  the  Windows  account
   databases.  If        you  change  the user information on your system,
   you'll need to regenerate       the passwd file for it to have the  new
   information.


        For  very  simple needs, an entry for the current user can be cre
   ated       by using the option  -c.

(Non so perché la spaziatura sia così "off" ...)

Ho quindi usato il seguente comando:

mkpasswd -c | sed -e 'sX / bashX / zshX' | tee -a / etc / passwd

La prossima volta che aprirai un Cygwin Terminal, passerà direttamente a zsh

E questo, penso, è quello che hai chiesto.


17

Aggiungo semplicemente la bindirectory nella directory cygwin alla mia variabile di ambiente di percorso di Windows e quindi creo un collegamento per:

mintty.exe -i /Cygwin-Terminal.ico /bin/zsh --login

o modificare semplicemente il collegamento predefinito del menu di avvio di Cygwin allo stesso.


2
Ho dovuto usare al /bin/zshposto di zsh.
kraiz,

1
the bin directory in the cygwin directory to my Windows Path Environment Variablefunziona senza questo cambiamento per me
ruslo,

il inon è necessaria perché sarà una shell di login e non interactive.
Timo,

7

Copiato dalla mia risposta su Stack Overflow :


Invece di creare un file passwd, che Cygwin consiglia contro 1 , è possibile modificare /etc/nsswitch.conf . Aggiungi o modifica la seguente riga:

db_shell: / usr / bin / zsh

Il lato negativo / su di questo metodo è che, se si hanno più utenti, questa modifica ha effetto su tutti loro. Il lato positivo è che è semplicissimo. L'unico problema è che devi riavviare Cygwin.

Se fai uso mkpasswd dopo questa modifica, utilizzerà la nuova shell di default per tutti gli utenti che sono autorizzati ad accedere.


1 La documentazione di mkpasswd dice questo:

Non usare questo comando per generare un file / etc / passwd locale, a meno che tu non ne abbia davvero bisogno. Consultare la Guida dell'utente di Cygwin per ulteriori informazioni.

Non riesco davvero a trovare alcun solido ragionamento nella guida per l' utente , a parte una menzione del fatto che dovrai rigenerare i file / etc / passwd e / etc / group se i tuoi utenti e gruppi cambiano, che suppongo sia abbastanza decente ragionare. Posso dire che il processo è in qualche modo soggetto a errori per i neofiti.


Questo dovrebbe essere contrassegnato come accettato.
Arda,

4

Supponendo che tu sia interessato a cambiare la shell utilizzata in mintty / Cygwin Terminal, controlla prima la variabile di ambiente SHELL, quindi il file passwd (ora inesistente), quindi torna a / bin / sh, che è quello che sembra stia facendo per impostazione predefinita.

Sono stato in grado di impostare la variabile d'ambiente SHELL in Windows per /usr/bin/zshe ha funzionato senza altre modifiche. L'ho appena cambiato per il mio utente di Windows, non a livello globale.

L'impostazione di una variabile di ambiente varia probabilmente a seconda della versione di Windows. Prova a cercare "ambiente" nel tuo pannello di controllo di Windows. Per me, in Windows 7, è stato Pannello di controllo → Sistema → Impostazioni di sistema avanzate, che visualizza il pannello di controllo / finestra di dialogo Proprietà di sistema, quindi la scheda Avanzate, quindi il pulsante Variabili d'ambiente, che fa apparire la finestra di dialogo Variabili d'ambiente, quindi crea una nuova variabile utente denominata SHELLcon il valore /usr/bin/zsh. Quindi OK torna indietro da tutto ciò e inizia un nuovo conio.


Ora questo dovrebbe essere votato abbondantemente! Il modo più semplice che non interferisce con le macchinazioni interne di Cygwin e facilmente reversibile!
pepoluan,

1

Ho pensato di aggiungere questa risposta nel caso in cui aiuti chiunque lo stia cercando. Se usi chere (che aggiunge un'opzione "Bash prompt here" al menu contestuale del tasto destro di qualsiasi cartella), puoi impostarlo su zsh ("Prompt Zsh qui") con:

chere -i -t mintty -s zsh

0

Se si desidera utilizzare la shell Cygwin all'interno di IDE Intellij, utilizzare la seguente configurazione in settings / tools / terminal

c:\cygwin\bin\zsh.exe -l -i

Questo incorporerà la shell Cygwin all'interno di Intellij invece di generare una nuova finestra

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.