Come accedere alla storia al volo in Unix?


12

Ad esempio, se lo faccio a

mkdir thisismyfolder912

Ricordo che c'è un modo più semplice per passare a thisismyfolder912quello di dover fare un

cd thisismyfolder912

Cos'è e come funziona? Inoltre, quali sono gli altri modi in cui posso usarlo?


1
Utilizzare il completamento TAB per comandi e directory non presenti nell'elenco cronologico recente. cd this<TAB>
inverti il

Risposte:


10

Stai parlando dell'espansione della cronologia classica o dell'elaborazione Readline? cd !$nella riga di input successiva sostituirà l'ultimo argomento della riga precedente M-.o M-_lo strapperà utilizzando Readline.



Stavo cercando cd !$. "Espansione cronologia classica o elaborazione Readline" Non capisco esattamente cosa intendi ...
Lazer,

2
@Lazer !$è un'espansione della storia ; la shell lo elabora mentre analizza il tuo comando. M-. è una sequenza di tasti readline; readline è la libreria che gestisce ogni tasto premuto e vede che hai premuto M-. e digita automaticamente l'ultimo argomento dell'ultimo comando
Michael Mrozek

9

Se la tua domanda riguarda l'accesso alla cronologia dei comandi, prova questo comando ben noto

history 

Puoi anche provare Ctrl+ re iniziare a digitare un comando che stai cercando di ricordare di aver digitato di recente.

(reverse-i-search)`cd ': cd mydir/data/

Premi ESCper selezionare il comando o uscire. Questo funziona per me almeno su SuSE; non sono sicuro di altre distro.


4
Whoa! Questo effettivamente cambierà la mia vita. Fottiti history | grep ...!
Oli,

Questo non è solo relativo a SuSE, penso che sia una funzionalità Bash :)
sakisk

Ho appena letto sull'utilizzo viper gestire la tua riga di comando. Sembra fantastico. usando vi per modificare i comandi della shell
Banjer


2

questo ha sempre funzionato per me:

mkdir thisismyfolder
cd $_

Fai attenzione, però: si $!espande all'ultima parola che hai effettivamente digitato, si $_espande all'ultima parola dopo l'espansione - così potresti echo /tmp/tmpfile*e vedere un mucchio di file che vuoi rimuovere, ma rm $_rimuoverà solo uno di essi.
jmb,

1

Raccogliendo un suggerimento da un altro thread, se inserisci:

bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward

nel tuo .bashrc, quindi, puoi iniziare a digitare qualcosa dalla tua cronologia, quindi premere la freccia su e quindi, anziché passare attraverso la cronologia elemento per elemento, salterà direttamente alle voci precedenti che iniziano con ciò che hai già digitato.

Immagino che questo non sia di grande aiuto con il particolare esempio fornito nella domanda, ma è una cosa che mi aiuta ad accedere alla cronologia al volo.


1

Se usi bash ti suggerisco pushde popd. È possibile creare una pila di directory e sfogliarla rapidamente. Vedi questo esempio:

PWD:~$ pushd /opt/google/chrome/resources/
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ pushd /etc/cron.daily/
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ pushd /opt/pac/lib/method/
/opt/pac/lib/method /etc/cron.daily /opt/google/chrome/resources ~
PWD:/opt/pac/lib/method$ popd
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ popd
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ popd
~
PWD:~$

Se si utilizza un prompt abbreviato, i post diventano più leggibili. (Mi riferisco alla rimozione dell'utente e dei nomi host. Capisco che mostrare il PWD invece di $essere utile solo durante la dimostrazione pushd, ecc.)
Sospeso fino a nuovo avviso.

1

Su una nota correlata, raccomando di usare histverify in bash. Inserisci questo nel tuo ~ / .bashrc:

shopt -s histverify

Questo farà sì che bash stampi il comando dopo l'espansione! $ O altre funzioni della cronologia e ti darà la possibilità di guardarlo prima di premere nuovamente Invio per eseguirlo effettivamente. Per me, il controllo di integrità vale la pressione occasionale del tasto extra. Vuoi assicurarti di eseguire il cd foocomando, non rm -rf fooquello ...

Uso frequentemente l' Ctrl-Rapproccio, nonché Alt-.(che si adatta bene allo scenario che descrivi). Userò! $ In occasione.

Queste sono tecniche di utilità generale molto utili.

Ma per rispondere alla tua domanda specifica:

Creare una directory e registrarla direttamente in essa è una combinazione così comune che è utile avere una funzione per racchiuderla.

function mcd {
  local newdir='_mcd_command_failed_'
  if [ -d "$1" ]; then   # Dir exists, mention that
    echo "$1 exists..."
    newdir="$1"
  else
    if [ -n "$2" ]; then   # We've specified a mode
        command mkdir -p -m $2 "$1" && newdir = "$1"
    else                   # Plain old mkdir
        command mkdir -p "$1" && newdir="$1"
    fi
  fi
  builtin cd "$newdir"   # No matter what, cd into it
}

Uso: mcd thisismyfolder


1

Se la tua shell usa readline (che è il caso bash) puoi fare qualcosa come premere ATL+ .insieme?

Dalla documentazione di GNU Readline :

yank-last-arg (M-. o M-_)

Inserisci l'ultimo argomento nel comando precedente (l'ultima parola della voce della cronologia precedente). Con una discussione, comportati esattamente come yank-nth-arg. Le chiamate successive a yank-last-arg tornano indietro nell'elenco cronologico, inserendo a turno l'ultimo argomento di ogni riga.

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.