Стрелка вверх и.bash_history имеют разные команды, так где же стрелка вверх получает свои данные?
Я, кажется, обнаружил, что ~/.bash_history
Файл не содержит того, что отображается при использовании стрелки вверх. Я нашел это, выполнив команду так
smbclient -L 10.2.10.240 -umyuser -p"mypassword on the command line is bad"
Эта команда на самом деле неверна, она имеет ошибку, -u
на самом деле должен быть -U
и поэтому эта команда не удалась.
Однако я также понял, что это было плохо, потому что это вводит ваш пароль в историю, я пошел в .bash_history
и что было интересно, так это то, что в этом нет ошибки. Имеет только
smbclient -L 10.2.10.240
и это все. Но это было бы странно, если вы используете стрелку вверх, то вся команда, включая ошибки, доступна для редактирования.
Итак, вопрос в том, почему есть разница между тем, что в .bash_history
и что показывает стрелка вверх? Где живут данные со стрелкой вверх?
Прежде чем указать на это; это довольно удобно в этом случае, потому что это предотвращает сохранение моего пароля, но, не потому, что он делает это, я также проверил его с правильными параметрами, а затем он сохраняет всю команду, включая пароли и все.
3 ответа
~/.bash_history
Файл обновляется только при закрытии / выходе из терминала. Пока вы находитесь в терминале, вы можете просматривать команды назад, введенные в этом сеансе. Поэтому, если вы выйдете из этого терминального сеанса, ваша история будет обновлена отсутствующей командой.
Также, если вы ставите пробел в начале строки перед командой, эта команда не будет сохранена в истории. Это хорошая практика, если вы запускаете команду, которую не хотите включать в историю.
На ваш вопрос дан ответ, но кроме того, если вы хотите ввести данные в реальном времени в историю, вы вводите: history
ввод!! сразу после номера истории повторно выполняет команду, на страницах руководства вы найдете несколько хороших способов изменить свою команду перед ее выполнением.
Основные различия между содержимым файла истории (который обычно ~/.bash_history
) и текущую историю (которая доступна с помощью стрелок вверх и вниз и history
команда) являются:
- Как уже упоминали другие, текущая история оболочки обычно не записывается в файл истории, пока оболочка не выйдет.
- Не менее важно, что текущая история оболочки обычно не читается из файла истории, кроме случаев, когда она запускается.
Другими словами:
- Команды в текущей оболочке не записываются в файл истории до тех пор, пока оболочка не закроется (т.е. она записывает их при выходе).
- Команды, добавленные в файл истории (например, другим одновременно запущенным экземпляром оболочки) после запуска текущей оболочки, не доступны ни стрелками вверх и вниз, ни вводом
history
и нажав Enter.
Тем не менее history
Команда, которая является встроенной оболочкой, имеет параметры, которые изменяют это поведение. Вы можете явно указать оболочке для чтения или записи в файл истории. В частности, вы можете:
- записать записи этой оболочки в файл истории после существующих (
-a
) или вместо них (-w
) - прочитать файл истории и добавить непрочитанные записи (
-n
) или все записи (-r
) к истории этой оболочки - очистить историю этой оболочки полностью (
-c
) или просто удалить одну запись (-d offset
)
Для дополнительной информации:
- Бежать
help history
в раковине Bash. - Взгляните на Справочное руководство по Bash, раздел 9.2 Встроенные истории Bash.
- Вы также можете быть заинтересованы в том, можно ли сделать запись в.bash_history незамедлительно?