Стрелка вверх и .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, и тем, что показывает стрелка вверх? Где живут данные со стрелкой вверх?

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

4
задан 3 August 2017 в 23:18

3 ответа

Файл ~/.bash_history обновляется только при закрытии / выходе из терминала. Пока вы находитесь в терминале, вы можете просматривать команды назад, введенные в этом сеансе. Поэтому, если вы выйдете из этого терминального сеанса, ваша история будет обновлена ​​отсутствующей командой.

Также, если вы поставите пробел в начале строки перед командой, эта команда не будет сохранена в истории. Это хорошая практика, если вы запускаете команду, которую не хотите включать в историю.

0
ответ дан 3 August 2017 в 23:18

Основные различия между содержимым файла истории (обычно это ~/.bash_history) и текущей историей (которая доступна с помощью стрелок вверх и вниз и команды history):

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

Другими словами:

  • Команды в текущей оболочке не записываются в файл истории до тех пор, пока оболочка не закроется (т.е. она записывает их при выходе).
  • Команды, добавленные в файл истории (например, другим одновременно запущенным экземпляром оболочки) после запуска текущей оболочки, недоступны ни стрелками вверх и вниз, ни вводом history и нажатием Enter < /kbd>.

Однако команда history, являющаяся встроенной оболочкой, имеет опции , которые изменяют это поведение. Вы можете явно указать оболочке для чтения или записи в файл истории. В частности, вы можете:

  • записывать записи этой оболочки в файл истории после существующих (-a) или вместо них (-w)
  • читать файл истории и добавить непрочитанные записи (-n) или все записей (-r) в историю этой оболочки
  • полностью очистить историю этой оболочки (-c) или просто удалить одну запись ( -d offset)

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

0
ответ дан 3 August 2017 в 23:18

На ваш вопрос дан ответ, но, кроме того, если вы хотите ввести данные в реальном времени в историю, вы вводите: history

ввод! Сразу после номера истории повторно выполнил команду в человеке На страницах вы найдете несколько хороших способов изменить свою команду перед выполнением.

0
ответ дан 3 August 2017 в 23:18

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

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