При открытии оболочки bash ей передается содержимое файла истории. Когда он выходит, он добавляет свою историю в файл истории.
Если вы откроете другую (интерактивную) оболочку bash (в том же окне терминала), выполните несколько команд или только exit
, команды (или только exit
) будут добавлены в файл истории.
Однако если вы запустите неинтерактивную подпрограмму, история будет отключена, а переменная окружения HISTFILE
будет снята.
Вы можете проверить это, выполнив (bash -c 'echo x$HISTFILE')
или просто bash -c 'echo x$HISTFILE'
. Это приведет только к эху x
, доказывая, что переменная HISTFILE
не установлена во вложенной оболочке. (Я добавил x
только для того, чтобы получить видимый вывод от команды echo.)
(Причина bash -c
и одинарных кавычек в том, что они предотвращают расширение переменной оболочки в родительской оболочке. Если вы запустите (echo x$HISTFILE)
, расширение переменной оболочки передаст значение HISTFILE
в под-оболочку, которое она затем передаст эхом, создавая впечатление, что оно установлено в под-оболочке).
Таким образом, при запуске вложенной оболочки история выключена, а переменная HISTFILE
не установлена. При выходе из подкоманды в историю ничего не добавляется. Это именно то, что вы видите.
Вы можете заставить под-оболочку записать свою историю в файл истории:
$ history -w # write current history
$ wc -l $HISTFILE # count lines in history file
32 /home/anyuser/.bash_history
$ bash -c 'export HISTFILE=~/.bash_history'
$ wc -l $HISTFILE
32 /home/anyuser/.bash_history
$ bash -c 'export HISTFILE=~/.bash_history;history -w'
$ wc -l $HISTFILE
0 /home/anyuser/.bash_history
Последняя команда под-оболочки (та, что с history -w
) перезаписывает существующий файл истории историей под-оболочки, которая пуста, потому что история отключена в неинтерактивной под-оболочке.
Программы, которые вы устанавливаете через apt- get (или aptitude) почти всегда соответствующим образом попадает в / usr. НО программы, которые вы компилируете из исходного кода и производите установку, чаще всего попадают в / usr / local / bin, / usr / local / lib и т. Д., И у вас могут возникнуть проблемы с этим, поскольку путь, установленный пользователем в Debian / Ubuntu, - / usr, а не / usr / local.
При компиляции из исходного кода добавьте этот переключатель в конфигурацию: ./configure --prefix = / opt. Таким образом, при установке файлы окажутся в правильном каталоге
Даже если вы просто скопируете его в /opt
, просто chmod 755
на директории и исполняемом файле, чтобы позволить ему запускаться всеми. Что касается вывода, хороший способ сделать это - сделать папку принадлежащей определенной группе и добавить всех пользователей, которые могут изменять xxx_data
, в эту группу, например, так (запуск от имени root):
groupadd xxx_data
chown root:xxx_data /path/to/folder
chmod 770 xxx_data /path/to/folder
usermod -aG xxx_data <username> #Repeat for each user
Вам нужно выполнить chmod 755
в вашем домашнем каталоге, или переместить xxx_data
в другое место.
Возможно, вам придется выйти из системы и снова войти, чтобы обновить разрешения.