Come disabilitare "auto cd" in zsh con oh-my-zsh


29

Googling questo non ha mostrato alcun risultato. Ecco cosa intendo: ho un file binario chiamato xnel mio percorso (non la cartella corrente, ma è nella cartella PATH), e anche una cartella con lo stesso nome nella directory di lavoro corrente. Se scrivo x, voglio che il binario venga eseguito, ma invece si trova nella cartella. Come posso risolvere questo problema?

Risposte:


46

Ecco tre domande in una ;-)

Opzione AUTO_CD e come trovarla

Innanzitutto l'opzione che stai cercando è AUTO_CD. Puoi trovarlo facilmente guardando in alto man zshoptions. Utilizzare la funzione di ricerca dei cercapersone, in genere si preme /e si inserisce la parola chiave. Con nte salti alla prossima occorrenza. Questo farà apparire quanto segue:

[..]
   Changing Directories
       AUTO_CD (-J)
              If  a  command is issued that can't be executed as a normal command, and the command is the name of a directory, perform the cd command to that directory.
[..]

L'opzione può essere disattivata utilizzando unsetopt AUTO_CD.

Spegnendolo correttamente

Stai usando oh-my-zsh che è descritto come

"Un framework guidato dalla community per la gestione della configurazione di zsh" Include oltre 120 plugin opzionali (rails, git, OSX, hub, capistrano, brew, ant, macports, ecc.), ...

Quindi la prossima cosa da scoprire è come abilitare / disabilitare le opzioni in base al framework.

Il file readme.textile afferma che il modo preferito per abilitare / disabilitare i plugin sarebbe una voce nel tuo .zshrc: plugins=(git osx ruby) Scopri quale plugin utilizza l'opzione AUTO_CD. Come scoperto dalla manpage, può essere invocato tramite l'opzione -J o AUTO_CD. Dato che oh-my-zsh è disponibile su github, la ricerca di esso farà apparire il file lib/theme-and-appearance.zsh. Se non si desidera disabilitare l'intero "tema-e-aspetto" del plugin, inserire un unsetopt AUTO_CDnel proprio .zshrc. Non modificare direttamente i file di oh-my-zsh, perché in caso di aggiornamento del framework, le modifiche andranno perse.

Perché gli eseguibili non vengono richiamati direttamente

La terza domanda è come eseguire direttamente un binario: devi eseguire il tuo file binario tramite un percorso, ad esempio con un prefisso ./come in ./do-something. Questa è una sorta di funzione di sicurezza e non deve essere modificata. Cerco di collegare una chiavetta USB, montarla e dargli un'occhiata ls. Se c'è un eseguibile chiamato lsche cancella la tua home directory, tutto sarebbe andato, poiché questo avrebbe sovrascritto l'ordine del tuo $ PATH.

Se hai comandi che chiami ripetutamente, impostare un alias nel tuo .zshrc sarebbe una soluzione comune.


4
Grazie mille! Ciò di cui avevo bisogno era la unsetopt auto_cdlinea (ho menzionato esplicitamente che l'eseguibile è nel mio percorso, tuttavia, la spiegazione potrebbe aiutare altri utenti a capire le cose).
Gabi Purcaru,

Grazie per la risposta esaustiva e per i dettagli su come hai trovato le informazioni (aiutando così gli altri a trovare informazioni come queste da sole in futuro).
barra finale

2
Il tuo ultimo paragrafo non ha senso. L'OP sta chiedendo un binario nella sua PATHvariabile d'ambiente che vogliono avere la precedenza su autocd. Non ha nulla a che fare con l'incapacità di script di shell per eseguire un eseguibile da un percorso senza specificare sia ./o /.
Qix,

Il primo collegamento al file Leggimi non funziona. Qui si tratta. Inoltre, la libdirectory OMZ non ha nulla a che pluginsfare con. Per quanto riguarda la domanda e come hai detto, il comando corretto è unsetopt.
Timo,
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.