В ударе, когда я возвращаюсь в истории, редактируют некоторую команду и выполняют его, эта отредактированная команда добавляется к истории, и исходный оставляют неповрежденным. Но время от времени мне так или иначе удается влиять на исходную команду, т.е. мое редактирование заменяет исходную команду назад в истории. Я не могу указать на то, как это происходит. Кто-то может объяснить? Моя цель состоит в том, чтобы избежать этого, таким образом, любое редактирование к предыдущей команде всегда добавляется к истории и никогда не заменяет оригинал.
Вот мой ответ. Пожалуйста, исправьте или предоставьте дополнительные сведения, если можете.
Когда в bash задана опция «vi» («set -o vi» - «Использовать интерфейс редактирования командной строки в стиле vi»), есть два режима редактирования команды из истории.
Первый режим (назовем его «базовым») - это когда вы сразу начинаете редактирование, используя Backspace, Del и символьные клавиши.
Другой режим - это «режим vi», в который вы входите, когда вы нажимаете Esc.
Если вы хотите сохранить свою историю нетронутой, НЕ используйте оба режима в одном редактировании. Я не знаю, как в точности работает bash, но вы можете думать об этом так:
Что дает
echo $HISTCONTROL
echo $HISTIGNORE
?
Изменить:
Я смог воспроизвести поведение, подобное тому, что вы видели, выполнив следующие действия:
В командной строке введите:
echo abcd
echo efgh
Дважды нажмите стрелку вверх, чтобы отобразилось "echo abcd"
Нажмите 1, чтобы добавить этот символ в конец
Нажмите escape, чтобы войти в командный режим
Дважды нажмите стрелку влево так что курсор находится на «c»
Нажмите x, чтобы удалить «c»
Нажмите Enter
Теперь, когда вы вернетесь назад по истории, вы увидите новую запись в конце:
echo abd1
и запись, которая раньше имела "echo abcd", теперь будет выглядеть так:
echo abcd1
Это один способ, я уверен, что есть и другие.
Если вы вернетесь к какой-либо предыдущей команде и отредактируете ее, но затем НЕ выполняйте ее (вместо этого используйте команды истории, чтобы перейти к другой команде и выполнить это), то правки останутся в вашем списке истории.
Нажатие Ctrl + C после редактирования отменяет это поведение. Он оставляет исходную команду в действии, т. Е. Отменяет запоминание изменений в оригинале.