È ansible sovrascrivere il command "cd" incorporato dalla row di command?

Appena each volta che 'cd' in una directory diversa sulla mia macchina (in questo caso, eseguendo Mac OS X 10.6.7) tramite la row di command (che è bash), scrivo immediatamente 'ls' per get l'elenco dei contenuti in quella directory. Sto cercando di capire un modo per ignorare il cd in modo che cambia nella directory richiesta e poi mi dia l'elenco in un colpo.

Sono stato in grado di get le funzionalità di base che cerco di lavorare con la seguente linea aggiunta al mio ~ / .bash_profile

function cl() { cd "[email protected]"; ls -l; } 

Questo funziona come previsto. Cambiare nella directory richiesta e mostrarmi il contenuto. Dove esco in un problema sta cercando di ignorare "cd" invece di creare un nuovo command "cl".

Le seguenti cose non funzionano

 ##### Attempt 1 ##### # Hangs the command line function cd() { cd "[email protected]"; ls -l; } ##### Attempt 2 ##### # Hangs the command line function cd() { 'cd' "[email protected]"; ls -l; } ##### Attempt 3 ##### # Does not change directory. # Does list contents, but of the directory where you started. function cd() { /usr/bin/cd "[email protected]"; ls -l; } #### Other attempts that fail in various ways ##### alias cd=cd "[email protected]"; ls -la; alias cd="cd '[email protected]'; ls -la;" alias cd='cd "[email protected]"'; ls -la; alias cd=/usr/bin/cd "[email protected]"; ls -la; 

Ho anche provato diverse altre iterazioni che non sono elencate oltre a fare un alias che punta alla function 'cl' di lavoro. Nessuno dei quali ha funzionato.

Quello che ho letto nella documentazione parla del fatto che "cd" non può essere eseguito come command esterno (che è quello che capisco per essere il modo in cui la function avrebbe bisogno di usarlo).

Quindi, posso attualmente utilizzare il mio command "cl" e get quello che voglio, ma la domanda è / rimane:

C'è un modo per ignorare il comportmento di 'cd' per farlo cambiare nella directory richiesta e poi fare qualcos'altro dopo?

Il seguente dovrebbe funzionare:

 function cd() { builtin cd "[email protected]" && ls -l; } 

Poiché la function è su una singola row, assicurarsi che sia terminata con ; come sopra per funzionare correttamente.

Penso che tu sia in esecuzione in un ciclo. La tua function cd sta chiamando cd , che è … la function che devi sapere di builtin che è una parola chiave che fa la ricerca di command utilizzare i Bash builtins come cd e non la tua function

 function cd { builtin cd "$1" : do something else } 

Inoltre, chiamando / usr / bin / cd non functionrà mai, anche se un tale command esistesse.

Cosa succederebbe:

  • Il mio shell Bash è in dir / bash / dir

  • Ho eseguito un command /usr/bin/cd /dir/for/cd

  • / usr / bin / cd va a dir / dir / for / cd

  • / usr / bin / cd esce.

  • Bash è ancora in / bash / dir, perché il process child / usr / bin / cd non può influire sul genitore.

Anche gli alias sono semplici sostituzioni di text. Non possono mai avere parametri.

Suggerisco di non sopprimere il cd perché ci sono altri script che dirottano la function 'cd', ad esempio, rvm. Sarebbe meglio scegliere un altro nome, come il 'd', invece e non specificare il tipo 'incorporato' nella tua function; altrimenti, il dirottatore non functionrebbe. Sto usando il codice qui sotto:

 function d() { cd "[email protected]" && ls;}