Терминальная замена! сопровождаемый числом с командой

Я очень смущен своим терминальным сеансом человечности, это, кажется, заменяет разделы в командах, которые запускаются ! сопровождаемый числом с на вид случайными командами. Это делает это с !87 замена его с screen -l и также с !88 и замененный это ls.

Любые идеи, почему это происходит, очень ценились бы.

12
задан 15 November 2017 в 12:54

1 ответ

Это bashрасширение истории, например.

!87

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

Вы находите описание этой функции в man bash, раздел “HISTORY EXPANSION”:

       An  event  designator  is  a  reference  to a command line entry in the
       history list.  Unless the reference is absolute, events are relative to
       the current position in the history list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command minus n.

Таким образом для быстрого вызова последней команды сделать !-1 и для пятой последней команды !-5. Удобный синоним для !-1 !! – если Вы звонили, например. apt install something и забыл sudo, просто выполнитесь sudo !! и Вы хороши.

Только обратная косая черта (\) и одинарные кавычки может заключить символ расширения истории в кавычки.

Для предотвращения расширения истории необходимо или выйти из восклицательного знака с обратной косой чертой (\!) или используйте одинарные кавычки ('!').

20
ответ дан 23 November 2019 в 03:35

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

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