Выберите команды из истории Bash

Нажатие на кнопку вверх утомительно, и я могу пропустить команду, которую искал. Поэтому, когда я набираю history на терминале, я получаю все команды, которые я вводил ранее, с индексом числа. Могу ли я просто позвонить по номеру, связанному с командой?

19
задан 8 September 2013 в 15:02

5 ответов

1112 Да, есть. Например, если вы хотите выполнить команду с номером 1234, выполните:

!1234

Другие полезные вещи:

  • [ 1115] Если вы хотите выполнить последнюю команду, которую вы выполняли, выполните:

    !!
    
  • Если вы хотите выполнить последнюю команду ls, которую вы выполняли, выполните:

    [ 111]
  • Если вы только что запустили ls /some/long/path и хотите cd к нему, выполните:

    cd !$
    

Для получения дополнительной информации:

0
ответ дан 8 September 2013 в 15:02

Используйте комбинацию клавиш Ctrl - r, вы сможете использовать ключевое слово для поиска в истории Bash.

Краткое руководство по привязке ключей bash: http://ss64.com/bash/syntax-keyboard.html

0
ответ дан 8 September 2013 в 15:02

Команда history покажет все команды и связанные с ними номера. Если вы хотите просто выполнить быструю проверку перед выполнением командной строки # 135, вы можете набрать:

echo !135

Это покажет вам, что будет выполняться.

0
ответ дан 8 September 2013 в 15:02

Если вы нашли номер истории команды и хотите выполнить ее снова, введите !, а затем номер, например, !1234 и нажмите Enter . Это часть истории расширения ; Вы можете прикрепить на него модификаторы .

Если вы хотите отредактировать команду перед ее запуском, fc 1234 вызывает внешний редактор.

Но , как уже упоминал Терри Ванг , обычно есть более быстрые способы поиска команды в истории, чем определение ее номера в истории, включая Ctrl + R чтобы вызвать инкрементальный поиск (нажмите Enter , когда вы нашли команду, которую хотите выполнить), или fc PREFIX, чтобы выполнить предыдущую команду, начиная с PREFIX.

0
ответ дан 8 September 2013 в 15:02

История bash может сделать много полезных вещей, и поиск с Strg-r, о котором упоминал Терри Ван, является важным среди них. Но также возможно сделать именно то, что вы просили.

Вы можете повторить предыдущую команду с помощью !!. При этом вы также можете редактировать предыдущую команду. Если, например, вы забыли получить привилегии root для команды

apt-get install a-long-list-of-packages

, вам не нужно повторно вводить все это снова. Вместо этого просто позвоните

sudo !!

Если вы хотите повторно выполнить команду в определенной позиции из вашей истории, вы также можете использовать !, например

!3

, чтобы повторно -исполнение команды в позиции 3. Имейте в виду, что это считается сверху. Поэтому, если вы храните 500 команд в своей истории, !1 будет «500 команд назад». Вы также можете использовать отрицательные числа. Например,

!-2

повторно выполнят вторую последнюю команду.

Вы также можете повторно выполнить последнюю команду, которая началась со строки, например

!apt-

, которая будет повторно выполнять последнюю строку, которая началась с «apt-». Если вам нужна последняя команда, в которой строка появилась где-либо в строке, вы можете использовать что-то вроде

!?pt-ge

Есть и другие интересные вещи, которые может делать история bash. Просто чтобы составить представление о широком спектре возможностей, вы можете специально получить доступ к параметру команды из истории. Таким образом,

!-5:3:p

будет печатать третий параметр до пятого с последней команды.

РЕДАКТИРОВАТЬ: Что касается комментария Руди ниже, со стандартными настройками это расширение истории bash действительно выполняется напрямую. Это, вероятно, лучше всего описать так: вызов !-3 заменяется на оболочкой с третьей последней командой из вашей истории и , затем выполняется ваш ввод (с заменой). Поэтому, если вы наберете !-3 и нажмете ENTER, а ваша третья последняя команда была ls ~, то в действительности она будет такой же, как если бы вы снова набрали ls ~ и нажали ENTER «по своему усмотрению».

Если вы не хотите этого, вы можете установить опцию оболочки histverify. Для установки и отмены параметров оболочки вы можете прочитать команду shopt. При установленном histverify вызов, подобный !-3, только записывает замену из вашей истории в вашу командную строку, но не выполняет ее напрямую. Вы должны, так сказать, нажать решающий ENTER самостоятельно - или воздержаться от него, если вы решите.

0
ответ дан 8 September 2013 в 15:02

Другие вопросы по тегам:

Похожие вопросы: