2

Я знаю о функции bash!текст, который запускает последнюю команду, начинающуюся с "текст". Но, кажется, не работает, когда "текст" содержит пространство. Иногда полезно искать что-то, содержащее пробелы.

например:

history | grep ping
  514  ping 192.168.100.2
  515  ping 192.168.100.3
  516  ping 192.168.100.4
  517  ping google.com
  518  ping 192.168.100.5
  519  ping 192.168.100.6
  520  ping 192.168.100.7

Я хочу назвать строку "ping google.com", используя! особенность. Я попробовал кое-что, но они потерпели неудачу:

это стандартное поведение, он запускает последнюю команду ping

/root# !ping  
ping 192.168.100.7

Простая строка с пробелом после! не работает

/root# !ping google
ping 192.168.100.7 google

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

/root# !"ping google"
bash: !"ping: event not found

/root# !'ping google'
bash: !'ping: event not found

/root# "!ping google"
"ping 192.168.100.7 google google"

/root# '!ping google'
bash: !ping google: command not found

/root# !\"ping google\"
bash: !\"ping: event not found

/root# !(ping google) 
bash: !: event not found

Это вызывает команду, но она вызовет последнюю команду, содержащую строку. Я хочу только команды, начиная с "пинг"

/root# !?google
ping google.com

Можно ли делать то, что я хочу?

2 ответа2

3

Вы можете использовать поиск в обратном направлении (control-r, если для режима редактирования установлено значение emacs, по умолчанию), и он работает с пробелом.

3

Я могу придумать пару способов:

  1. Использовать ? , Следующее из man history:

    !?string[?]
          Refer to the most recent command preceding the
          current postition in the history list contain‐
          ing  string.  The trailing ? may be omitted if
          string is followed immediately by a newline.
    

    Итак, вы должны быть в состоянии сделать это:

     !?ping google?
    
  2. Используйте функцию обратного поиска. Нажмите Ctrl R анс начните вводить ping google Нажмите ввод, когда соответствующая команда была найдена.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .