Posso modificare un comando del terminale per fare altre cose?

8

Ho esaminato alias, funzioni ... ma non ho trovato nulla di soddisfacente. Lascia che ti dia un paio di scenari:

  • 95% delle volte che I cd in una cartella, seguo con ls comando.
  • 90% delle volte che I mkdir , I cd me stesso in esso.

Hai un'idea.

Quale sarebbe il modo "più pulito" per legare insieme questi comandi (o altre funzionalità)?

    
posta Carles Alcolea 20.09.2015 - 23:36
fonte

4 risposte

4

Puoi inserire queste linee in .zsrhc o .bashrc

[ -z "$PS1" ] && return
function cd {
builtin cd "$@" && ls -F
}

Risultato - >

Spiegazionedi questa risposta :

Earlier in my .bashrc I have: [ -z "$PS1" ] && return, and everything after that line only applies to interactive sessions, so this doesn't affect how cd behaves in scripts.

Ulteriori informazioni da questo commento :

[ -z "$PS1" ] checks if the $PS (interactive prompt variable) is "zero length" (-z). If it is zero length, this means it has not been set, so Bash must not be running in interactive mode. The && return part exits from sourcing .bashrc at this point, under these conditions.

Btw, grazie per la domanda, è davvero fantastico:)

Modifica:

Un'altra soluzione sarebbe quella di integrare il tuo ls al tuo prompt; Sono sicuro che puoi farlo con OhMyZsh;)

    
risposta data 23.09.2015 - 16:28
fonte
13

Tenderei a creare un nuovo comando per questo. Penso che sarebbe anche logico combinarli in uno solo.

go() {
    if [ -d "$1" ]; then
        cd "$1" && ls
    else
        mkdir -p "$1" && echo "Created directory $1" && cd "$1"
    fi
}
    
risposta data 21.09.2015 - 07:57
fonte
6

Ho provato ad aggiungere cose come queste al mio .bashrc :

cd() {
    command cd "$@"
    command ls
}

mkdir() {
    command mkdir "$@"
    command cd "$@"
}

Tuttavia, ho scoperto che questo può rovinare gli script che usano i comandi sovrascritti e la gestione delle opzioni può essere fragile (ad esempio, se si desidera passare -p al comando mkdir sopra, è anche passato a cd ). Meglio sarebbe solo definire alias con nomi diversi (ad esempio, c o mcd ).

    
risposta data 21.09.2015 - 04:26
fonte
5

Penso che le funzioni siano la strada da percorrere. Qualcosa come

chglist() {
    cd "$1" && ls
}

come esempio.

    
risposta data 20.09.2015 - 23:59
fonte

Leggi altre domande sui tag