Як отримати доступ до історії на льоту в Unix?


12

Наприклад, якщо я роблю а

mkdir thisismyfolder912

Я пам’ятаю, є деякий простіший спосіб перейти до thisismyfolder912того, як робити

cd thisismyfolder912

Що це таке і як це працює? Крім того, які інші способи я можу цим використати?


1
Використовуйте доповнення TAB для команд та каталогів, які не є у вашому недавньому списку історії. cd this<TAB>
інвертувати

Відповіді:


10

Ви говорите про класичне розширення історії чи обробку Readline? cd !$у наступному рядку введення буде замінено в останньому аргументі попереднього рядка або, M-.або M-_, витягне його за допомогою Readline.



Я шукав cd !$. "Класичне розширення історії чи обробка читання рядків" Я точно не розумію, що ви маєте на увазі ...
Lazer

2
@Lazer !$- це розширення історії ; оболонка обробляє її під час аналізу вашої команди. М-. - натискання клавіш читання; readline - це бібліотека, яка обробляє кожну клавішу, яку ви натискаєте, і вона бачить, що ви натиснули M-. та вводить автоматично останній аргумент останньої команди
Майкл Мрозек

9

Якщо ваше питання стосується доступу до історії команд, спробуйте цю добре названу команду

history 

Ви також можете спробувати Ctrl+ rта почати вводити команду, яку ви намагаєтесь запам'ятати, яку ви нещодавно ввели.

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

Натисніть, ESCщоб вибрати команду або вийти. Це працює для мене принаймні на SuSE; не впевнений у інших дистрибутивах.


4
ХТО! Це насправді змінить моє життя. Викрутіть вас history | grep ...!
Олі

Це стосується не лише SuSE, я думаю, що це особливість Bash :)
sakisk

Я щойно прочитав про використання viдля керування вашим командним рядком. Виглядає супер круто. використовуючи vi для редагування команд оболонки
Banjer

7

Це так само просто, як Alt+.

$ mkdir lasdfjalsdkjf
$ cd 

Alt + .

$ cd lasdfjalsdkjf

Як ти отримав фантастичну коробку навколо Alt? Я не бачив цього в посібнику довідки.
Банджер

2
@Banjer: використовуйте <kbd></kbd>теги для оточення ключа.
Лазер



2

це завжди працювало для мене:

mkdir thisismyfolder
cd $_

Однак $!слідкуйте за цим: розширюється на останнє слово, яке ви фактично набрали, $_розширюється на останнє слово після розширення - так ви можете echo /tmp/tmpfile*побачити купу файлів, які ви хочете видалити, але потім rm $_видалите лише один із них.
jmb

1

Збирання наконечника з іншої нитки, якщо ви кладете:

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

тоді у вашому .bashrc ви можете почати вводити щось із своєї історії, а потім натискати стрілку вгору, а потім, замість того, щоб переглядати предмет історії за пунктом, воно буде пропускати право до попередніх записів, які починаються з того, що ви вже зробили набрав.

Я думаю, що це не дуже допомагає на конкретному прикладі, наведеному в питанні, але це одне, що допомагає мені отримувати доступ до історії на ходу.


1

Якщо ви використовуєте bash, я пропоную pushdі popd. Ви можете створити стек каталогів і швидко переглядати його. Дивіться цей приклад:

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

Якщо ви користуєтесь скороченим запитом, це робить публікації більш зрозумілими. (Я маю на увазі видалення імен користувачів та хостів. Я розумію, що показ PWD замість просто $корисний під час демонстрації pushdтощо)
Призупинено до подальшого повідомлення.

1

У відповідній замітці я рекомендую використовувати histverify в bash. Помістіть це у своєму ~ / .bashrc:

shopt -s histverify

Це призведе до того, що bash надрукує команду після розширення! $ Або інших функцій історії, і дасть вам можливість подивитися на неї, перш ніж натиснути клавішу Enter, щоб фактично її запустити. Для мене перевірка здоровості важить для періодичного додаткового натискання клавіші. Хочете переконатися, що я виконую cd fooкоманду, а не rm -rf fooодну ...

Я часто використовую Ctrl-Rпідхід, а також Alt-.(що добре підходить для описаного вами сценарію). Я буду використовувати! $ При нагоді.

Це дуже корисні методи загального призначення.

Але для вирішення вашого конкретного питання:

Створення каталогу та введення безпосередньо в нього настільки поширена комбінація, що корисно мати функцію, щоб обернути її.

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
}

Використання: mcd thisismyfolder


1

Якщо ваша оболонка використовує лінію зчитування (що стосується bash), ви можете зробити щось на кшталт натискання ATL+ .разом?

З документації про читання GNU :

yank-last-arg (M-. або M-_)

Вставте останній аргумент до попередньої команди (останнє слово попереднього запису історії). З аргументом поводьтесь так, як yank-nth-arg. Послідовні виклики yank-last-arg переміщуються назад через список історії, вставляючи по черзі останній аргумент кожного рядка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.