Jak uzyskać dostęp do historii w locie w Uniksie?


12

Na przykład, jeśli zrobię

mkdir thisismyfolder912

Pamiętam, że istnieje łatwiejszy sposób na przejście thisismyfolder912niż konieczność zrobienia

cd thisismyfolder912

Co to jest i jak to działa? A także, jakie są inne sposoby na wykorzystanie tego?


1
Użyj polecenia TAB-uzupełnianie dla poleceń i katalogów, których nie ma na liście ostatnich historii. cd this<TAB>
odwrócenie

Odpowiedzi:


10

Mówisz o klasycznym rozszerzaniu historii, czy przetwarzaniu Readline? cd !$w następnym wierszu wejściowym zastąpi ostatni argument poprzedniego wiersza M-.lub M-_szarpnie go za pomocą Readline.


1
Napisz na inne pytanie, które omawia Alt +.
Michael Mrozek

Szukałem cd !$. „Klasyczna ekspansja historii lub przetwarzanie Readline” Nie do końca rozumiem, co masz na myśli…
Lazer,

2
@Lazer !$to rozszerzenie historii ; powłoka przetwarza go podczas analizy polecenia. M- jest naciśnięciem klawisza readline; readline to biblioteka, która obsługuje każdy naciśnięty klawisz i widzi, że nacisnąłeś M-. i automatycznie wpisuje ostatni argument ostatniego polecenia
Michael Mrozek

9

Jeśli Twoje pytanie dotyczy dostępu do historii poleceń, wypróbuj to dobrze nazwane polecenie

history 

Możesz także spróbować Ctrl+ ri zacząć wpisywać polecenie, które próbujesz zapamiętać, które niedawno napisałeś.

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

Naciśnij, ESCaby wybrać polecenie lub wyjdź. Działa to dla mnie przynajmniej na SuSE; nie jestem pewien co do innych dystrybucji.


4
WHOA! To faktycznie zmieni moje życie. Pieprzyć cię history | grep ...!
Oli

Nie jest to związane tylko z SuSE, myślę, że jest to funkcja Bash :)
sakisk,

Właśnie przeczytałem o używaniu vido zarządzania linią poleceń. Wygląda super. używanie vi do edytowania poleceń powłoki
Banjer


2

to zawsze działało dla mnie:

mkdir thisismyfolder
cd $_

Uważaj jednak na to: $!rozwija się do ostatniego wpisanego słowa, $_rozwija się do ostatniego słowa po rozwinięciu - możesz echo /tmp/tmpfile*i zobaczysz kilka plików, które chcesz usunąć, ale wtedy rm $_usuniesz tylko jeden z nich.
jmb

1

Podnosząc wskazówkę z innego wątku, jeśli umieścisz:

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

w swoim .bashrc możesz zacząć pisać coś z historii, a następnie nacisnąć strzałkę w górę, a następnie zamiast przeglądać historię po elemencie, przejdzie od razu do poprzednich pozycji, które zaczynają się od tego, co już masz wpisane.

Wydaje mi się, że to niewiele pomaga w konkretnym przykładzie podanym w pytaniu, ale jest to jedna rzecz, która pomaga mi w natychmiastowym dostępie do historii.


1

Jeśli używasz bash, sugeruję pushdi popd. Możesz utworzyć stos katalogu i szybko go przeglądać. Zobacz ten przykład:

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:~$

Jeśli użyjesz skróconego monitu, posty będą bardziej czytelne. (Mam na myśli usunięcie użytkownika i nazwy hosta. Rozumiem, że pokazanie PWD zamiast po prostu $jest przydatne podczas demonstracji pushditp.)
Wstrzymano do odwołania.

1

W powiązanej notatce zalecam użycie histverify w bash. Umieść to w swoim ~ / .bashrc:

shopt -s histverify

Spowoduje to, że bash wydrukuje polecenie po rozwinięciu! $ Lub innych funkcji historii, i da ci szansę na obejrzenie go przed ponownym naciśnięciem Enter, aby go uruchomić. Dla mnie sprawdzenie poczytalności jest warte okazjonalnego dodatkowego naciśnięcia klawisza. Chcesz się upewnić, że uruchamiam cd foopolecenie, a nie to rm -rf foo...

Często używam tego Ctrl-Rpodejścia, a także Alt-.(co pasuje do opisywanego scenariusza). Czasami skorzystam z! $.

Są to bardzo przydatne techniki ogólnego zastosowania.

Ale aby odpowiedzieć na twoje konkretne pytanie:

Tworzenie katalogu i zapisywanie go bezpośrednio w nim jest tak powszechną kombinacją, że przydatna jest funkcja, która go zawija.

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
}

Stosowanie: mcd thisismyfolder


1

Jeśli twoja powłoka używa readline (co ma miejsce w przypadku bash), możesz zrobić coś takiego jak naciśnięcie ATL+ .razem?

Z dokumentacji GNU Readline :

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

Wstaw ostatni argument do poprzedniego polecenia (ostatnie słowo poprzedniego wpisu historii). Z argumentem zachowuj się dokładnie jak yank-nth-arg. Kolejne wywołania yank-last-arg cofają się po liście historii, wstawiając kolejno ostatni argument każdego wiersza.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.