Удалил .bash_history, теперь история больше не сохраняется (хотя заново создал)

Я только что установил новую копию El Capitan. Я случайно удалил .bash_history, поэтому я просто сделал это touch .bash_historyснова, надеясь, что это решит проблему моей истории bash, которая не запоминается при закрытии и повторном открытии терминала.

Но это не так. И я понятия не имею, почему.

Macbuech:~ josh$ ~/.bash_history
-bash: /Users/josh/.bash_history: Permission denied
Macbuech:~ josh$ ls ~/.bash_history
/Users/josh/.bash_history
Macbuech:~ josh$ echo $HISTSIZE
500
Macbuech:~ josh$ echo $HISTFILESIZE
500
Macbuech:~ josh$ echo $HISTFILE
/Users/josh/.bash_sessions/9817540A-F021-4E1A-93A1-B322BC4738AB.historynew
Macbuech:~ josh$ echo $HISTTIMEFORMAT

Я немного повозился, .bash_profileчтобы заставить работать некоторые цвета, согласно этой статье :

export PS1="\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "
export CLICOLOR=1
export LSCOLORS=ExFxBxDxCxegedabagacad
alias ls='ls -GFh'

Я снова удалил все это, чтобы убедиться, что проблема не в нем. Итак, вот мой .bash_profile:

[[ -s "$HOME/.profile" ]] && source "$HOME/.profile" # Load the default .profile
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

На этом сайте говорится, что может быть проблема с RVM, и я попытался добавить в него .bash_logoutwith shell_session_update, но безуспешно.

Любая помощь высоко ценится.

Вот мой полный env:

Macbuech:~ josh$ env
rvm_bin_path=/Users/josh/.rvm/bin
TERM_PROGRAM=Apple_Terminal
GEM_HOME=/Users/josh/.rvm/gems/ruby-2.2.4
SHELL=/bin/bash
TERM=xterm-256color
IRBRC=/Users/josh/.rvm/rubies/ruby-2.2.4/.irbrc
TMPDIR=/var/folders/sq/92dr708946s01kttg916m6xm0000gn/T/
Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.9AJd6SsR1y/Render
TERM_PROGRAM_VERSION=361.1
MY_RUBY_HOME=/Users/josh/.rvm/rubies/ruby-2.2.4
TERM_SESSION_ID=9817540A-F021-4E1A-93A1-B322BC4738AB
rvm_stored_umask=0022
USER=josh
_system_type=Darwin
rvm_path=/Users/josh/.rvm
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.gZZeyimp2O/Listeners
__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0
rvm_prefix=/Users/josh
PATH=/Users/josh/.rvm/gems/ruby-2.2.4/bin:/Users/josh/.rvm/gems/ruby-2.2.4@global/bin:/Users/josh/.rvm/rubies/ruby-2.2.4/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/josh/.rvm/bin
rvm_loaded_flag=1
PWD=/Users/josh
_system_arch=x86_64
XPC_FLAGS=0x0
_system_version=10.11
XPC_SERVICE_NAME=0
rvm_version=1.26.11 (master)
SHLVL=1
HOME=/Users/josh
LOGNAME=josh
GEM_PATH=/Users/josh/.rvm/gems/ruby-2.2.4:/Users/josh/.rvm/gems/ruby-2.2.4@global
LC_CTYPE=UTF-8
RUBY_VERSION=ruby-2.2.4
rvm_user_install_flag=1
_system_name=OSX
_=/usr/bin/env
Для чего выход ls -la ~/.bash_history? Может проблема с разрешениями? Вот мой:-rw------- 1 myusername staff 10852 18 gru 20:41 /Users/myusername/.bash_history
$ ls -la ~/.bash_history -rw-r--r-- 1 josh staff 3B Dec 31 08:38 /Users/josh/.bash_history
Вы перезапустили оболочку (или сам Терминал) после касания .bash_history?
Конечно, я сделал.
Не могли бы вы временно удалить свой ~/.bash_profile, запустить новую оболочку входа в систему, проверить, есть ли у вас та же проблема, сообщить об этом в своем OQ.

Ответы (2)

Я столкнулся с той же проблемой после добровольного удаления файла .bash_history.

Простое решение — не только коснуться файла, но и добавить текст — одного или нескольких переводов строки недостаточно :

echo "exit" >> ~/.bash_history

Затем полностью закройте Терминал и снова откройте его. Если вы сохранили всю свою работу во всех сеансах терминала, вы также можете просто

killall Terminal

Обновлять:

Я попытался воспроизвести вашу среду на виртуальной машине 10.11, и это действительно проблема с RVM: комментирование всех строк, связанных с rvm, в .profile и .bash_profile повторно включает обновления файла .bash_history.

Однако файловый метод .bash_logout (с содержимым shell_session_update ), похоже, здесь работает надежно. Просто не забывайте всегда вводить exitперед закрытием окна терминала или выходом из терминала. Без входа exitистория не обновится.

А теперь очевидный вопрос: почему? Нужен ли файлу символ новой строки или просто любой символ?
Кажется, это не работает для меня. У меня есть несколько строк в истории, но новые записи не добавляются.
ls и выйдите без новой строки в конце:ls\nexit
Все еще не работает.
Как это можно сделать, отключив .bash_profile?
@JoshuaMuheim переименовать во что-то другое, например, mv ~/.bash_profile ~/off.bash_profileи перезапустить Терминал (или killall Terminal)
ааа, я могу себе представить, что произошло - когда вы открываете терминал и ваша оболочка входа в систему - bash, bash открывает файл .bash_history. Это открывает внутренний файловый дескриптор, указывающий на файл с индексным узлом. Файл используется всеми оболочками bash параллельно. Теперь, когда вы удаляете файл из командной строки в сеансе bash и создаете его новым, файловый дескриптор bash все еще открыт. Но теперь есть новый файл истории с другим индексом. bash все еще хочет записать в старый дескриптор файла, указывающий на старый индекс, и не может. Кроме того, файл открывается в режиме добавления с помощью bash.
Гарекс, звучит интересно. Как это решить?
Спасибо за новость, кланомат. Я мог воспроизвести проблему: при комментировании материала RVM история работает, как и ожидалось. Это довольно раздражает... Но для этого я создам новый вопрос.
@JoshuaMuheim Вход exitперед выходом/закрытием терминала/окна терминала не помогает? На моей виртуальной машине я получил тот же envрезультат, что и у вас (за исключением того, что моя рубиновая версия была немного старше), и это сработало.
Я повторно включил материал RVM, и, что удивительно, история, кажется, все еще работает! Может быть, комментирование RVM временно исправило ситуацию?

Вам нужно воссоздать файл с помощью «nano», а не «touch». Запустите эту команду на терминале в вашей домашней папке (/Users/Your-Username):

нано .bash_history

Введите что-нибудь в файл (иначе он не будет создан), выйдите и сохраните.

Надеюсь, это поможет.

Чем это отличается от уже данного ответа?
Получите ожидаемый результат в более упрощенном виде, это единственное отличие @patrix . С уважением.
Тоже ничего не меняет. Может быть, это потому, что у меня открыты разные окна терминала, в каждом из которых есть несколько вкладок?
@JoshuaMuheim Это, вероятно, вызывает это, но не могу быть уверен, я не изучал подробно работу поведения «.bash_history» в osx «El Captain». Что, если я могу точно сказать, что каждый сеанс терминала в osx сохраняет изменения в файле «.bash_history», пока вы не закроете окно или не запустите команду вывода «выход», файл не блокируется, пока сеанс активен.