Posso modificare un comando terminale per fare cose aggiuntive?


8

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

  • Il 95% delle volte che mi trovo cdin una cartella, seguo un ls comando.
  • Il 90% delle volte che io mkdir, io cdstesso mi ci sono dentro.

Ti viene l'idea.

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


5
Perché gli alias non hanno funzionato per te?
Thorbjørn Ravn Andersen,

2
Quindi il risultato cd di mkdir dovrebbe quindi puntare su ls?
bmike

@bmike Bene, una directory appena creata sarà vuota, quindi non stampa nulla.
Casuale 832,

@ Random832 non presumi bandiere su ls, ma soprattutto la mia domanda rivelerà quanto si desideri un cambiamento rotto / pesante. Preferisco gli alias alle funzioni, ma entrambi possono tentare ciò che viene chiesto.
bmike

1
@ fd0 Non dubito che gli alias non abbiano funzionato. Sto chiedendo il perché. Potrebbe esserci una soluzione più semplice al problema.
Thorbjørn Ravn Andersen,

Risposte:


4

Puoi inserire queste righe nel tuo .zsrhco.bashrc

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

Risultato ->

inserisci qui la descrizione dell'immagine

Spiegazione da questa risposta :

In precedenza nel mio .bashrc ho: [-z "$ PS1"] && return, e tutto ciò che segue quella riga si applica solo alle sessioni interattive, quindi questo non influisce sul comportamento del cd negli script.

Ulteriori informazioni da questo commento :

[-z "$ PS1"] controlla se $ PS (variabile prompt interattiva) è "lunghezza zero" (-z). Se ha una lunghezza pari a zero, significa che non è stato impostato, quindi Bash non deve essere in esecuzione in modalità interattiva. La parte && return esce dal sourcing .bashrc a questo punto, in queste condizioni.

A proposito, grazie per la domanda, è davvero bello :)

Modificare :

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


1
In generale, non utilizzare lo stesso nome dei comandi standard di cd ls rm ecc. In quanto è necessario utilizzare questi comandi standard
user151019

@Mark Sono d'accordo per 'rm -rf ~ / *' ^^ Ma per un comando cd, non è davvero pericoloso. E Carles vuole "aggiornare i comandi esistenti", quindi ...
StrawHara,

Devo dire che ho usato questa soluzione da quando @StrawHara l'ha pubblicata e ho avuto 0 problemi. Volevo fornire il "come è andato" :) Ed è davvero utile; ecco come lo uso (.zshrc): i.imgur.com/WHpROIE.png
Carles Alcolea

13

Tenderei a dare un nuovo comando per questo. Penso che sarebbe anche logico combinarli in un unico.

go() {
    if [ -d "$1" ]; then
        cd "$1" && ls
    else
        mkdir -p "$1" && echo "Created directory $1" && cd "$1"
    fi
}

Mi piace la tua idea combinando questi! :-)
Martin Allert,

5
Questa risposta è anche la più pulita in quanto non disturba la definizione predefinita di cd / mkdir quando usata dagli script
holroy,

1
Certo, ma cosa succede se si decide di iniziare a utilizzare il linguaggio di programmazione Go? : P
arxanas,

@arxanas: usi i makefile? ;-)
DevSolar,

2
hmmm mi piace questo. ma se si digita erroneamente il nome, si crea una nuova directory. E 'difficile per implementare un controllo su un congedo (cd /.... o ../o qualcosa) ed eliminare la directory se è vuoto? Voglio dire, se lasci una directory, controlla se è vuota e, in tal caso, eliminala. se non lo vuoi, puoi comunque usare cd invece di go
Schwertspize

6

Ho provato ad aggiungere cose come queste alla mia .bashrc:

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

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

Tuttavia, ho scoperto che questo può rovinare gli script che utilizzano i comandi sovrascritti e la gestione delle opzioni può essere fragile (ad esempio, se si desidera passare -pal mkdircomando sopra , viene anche passato a cd). Meglio sarebbe solo definire alias con nomi diversi (diciamo, co mcd).


1
l'inserimento [ -z "$PS1" ] && returnalla fine del file, prima di quelle funzioni, dovrebbe aiutare
Carles Alcolea l'

5

Penso che le funzioni siano la strada da percorrere. Qualcosa di simile a

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

come esempio.

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.