Как получить доступ к истории на лету в Unix?


12

Например, если я сделаю

mkdir thisismyfolder912

Я помню , есть некоторые более простой способ , чтобы переключиться на thisismyfolder912того , чтобы сделать

cd thisismyfolder912

Что это за путь и как он работает? Кроме того, каковы другие способы, которыми я могу использовать это?


1
Используйте TAB-завершение для команд и каталогов, которых нет в вашем недавнем списке истории. cd this<TAB>
инвертировать

Ответы:


10

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


1
Пост на другой вопрос, который обсуждает Alt +.
Михаил Мрозек

Я искал cd !$. «Расширение классической истории или обработка Readline» Я не совсем понимаю, что вы имеете в виду ...
Lazer

2
@Lazer !$- это расширение истории ; оболочка обрабатывает его так же, как анализирует вашу команду. M-. нажатие клавиши readline; 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? Я не видел это в справочном руководстве.
Banjer

2
@Banjer: используйте <kbd></kbd>теги, чтобы окружить ключ.
Lazer

@Banjer<kbd>
Майкл

Кроме того, это так же, как ответ Jmb
Майкл Мрозек

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-.(который хорошо подходит для сценария, который вы описываете). Я буду использовать! $ По случаю.

Это очень полезные методы общего назначения.

Но чтобы ответить на ваш конкретный вопрос:

Создание каталога и cd'ing непосредственно в него - настолько распространенная комбинация, что полезно иметь функцию для ее обертывания.

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

Если ваша оболочка использует readline (что имеет место bash), вы можете сделать что-то вроде нажатия ATL+ .вместе?

Из документации GNU Readline :

yank-last-arg (M- или M-_)

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.