Odpowiedzi:
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.
cd !$
. „Klasyczna ekspansja historii lub przetwarzanie Readline” Nie do końca rozumiem, co masz na myśli…
!$
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
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.
history | grep ...
!
vi
do zarządzania linią poleceń. Wygląda super. używanie vi do edytowania poleceń powłoki
To tak proste, jak Alt+.
$ mkdir lasdfjalsdkjf
$ cd
Alt + .
$ cd lasdfjalsdkjf
<kbd></kbd>
tagów, aby otoczyć klawisz.
<kbd>
to zawsze działało dla mnie:
mkdir thisismyfolder
cd $_
$!
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.
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.
Jeśli używasz bash, sugeruję pushd
i 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:~$
$
jest przydatne podczas demonstracji pushd
itp.)
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 foo
polecenie, 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
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?
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.
cd this<TAB>