Команда PROMPT_COMMAND в совокупности с export HISTFILE создают новые файлы при смене директорий. (Просьба разобраться)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Ответить
Аватара пользователя
жучара
Сообщения: 937
ОС: астралинукс

Команда PROMPT_COMMAND в совокупности с export HISTFILE создают новые файлы при смене директорий.

Сообщение жучара »

Друзья! Не то, чтобы жизненно необходимо, но уж больно любопытно. Итак, такие две команды:

Shell

PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
export HISTFILE="new_history"
Смотрите, что происходит. Debian stretch, нулёвая ось без графики.

Смотрим, что директория пуста.

Shell

user@debian:~/foo$ ls
user@debian:~/foo$
Теперь эти две команды вводим и смотрим, что будет

Shell

user@debian:~/foo$ PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
user@debian:~/foo$ export HISTFILE="new_history"
user@debian:~/foo$ ls
new_history
user@debian:~/foo$


Ничего себе. Но это ладно. Создадим директорию и войдём в неё.

Shell

user@debian:~/foo$ mkdir bar
user@debian:~/foo$ cd bar
user@debian:~/foo/bar$ ls
new_history
user@debian:~/foo/bar$
То есть хочешь создавать файл при заходе в директорию- используй такие две команды, во как. По одной так не работают.
С export HISTFILE="new_history" всё понятно, в смысле зачем она нужна, а вот с PROMPT_COMMAND не очень. Что она делает, я так и не понял. Из русского mana (в английском то же самое написано):
PROMPT_COMMAND
Если значение задано, оно выполняется как команда перед выдачей каждого
первичного приглашения.
Что за первичное приглашение да ещё и каждое... В общем, хотелось бы, чтобы кто-нибудь пролил свет как это всё работает. Спасибо, кто откликнется.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1367
ОС: Slackware

Re: Команда PROMPT_COMMAND в совокупности с export HISTFILE создают новые файлы при смене директорий.

Сообщение UnixNoob »

Первичное приглашение, это приглашение к вводу команды, prompt. На сколько я понял. Т.е прежде чем терминал пригласит вас к вводу команд, будет выполнено содержание этой переменной. Вот тут понятный пример.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Команда PROMPT_COMMAND в совокупности с export HISTFILE создают новые файлы при смене директорий.

Сообщение Bizdelnick »

жучара писал(а):
11.10.2021 18:11
Что за первичное приглашение да ещё и каждое... В общем, хотелось бы, чтобы кто-нибудь пролил свет как это всё работает.
В том же мане всё расписано в разделе PROMPTING (не знаю, как он в Вашем русском переводе называется, равно как есть ли он там вообще).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 937
ОС: астралинукс

Re: Команда PROMPT_COMMAND в совокупности с export HISTFILE создают новые файлы при смене директорий.

Сообщение жучара »

Bizdelnick писал:
11.10.2021 20:12
жучара писал(а):
11.10.2021 18:11
Что за первичное приглашение да ещё и каждое... В общем, хотелось бы, чтобы кто-нибудь пролил свет как это всё работает.
В том же мане всё расписано в разделе PROMPTING (не знаю, как он в Вашем русском переводе называется, равно как есть ли он там вообще).
что ж вы так русский язык-то не любите?
...Я, конечно, благодарен вам, что указали, где брать информацию по PS1. И UnixNoob спасибо, теперь я знаю, что то, написано в PROMPT_COMMAND выполняется до того. как напечатается приглашение. Всё ж таки хотелось бы пойти дальше и разобраться, благодаря какой именно команде создаётся файл. Да ещё по смене директории.

Ну вот например, команда:
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
Рекурсия же... Или нет?
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Команда PROMPT_COMMAND в совокупности с export HISTFILE создают новые файлы при смене директорий.

Сообщение Bizdelnick »

жучара писал(а):
11.10.2021 21:34
что ж вы так русский язык-то не любите?
Я? Я, вроде бы, на нём с Вами изъясняюсь. А что русские маны отстают от оригинала на 10+ лет в среднем — это я не виноват. Мои любовь к языку и альтруизм не простираются так далеко, чтобы я их все переводил задаром.
жучара писал(а):
11.10.2021 21:34
Всё ж таки хотелось бы пойти дальше и разобраться, благодаря какой именно команде создаётся файл.
Странный вопрос, казалось бы, и вариант ответа на него только один:
жучара писал(а):
11.10.2021 21:34
history -a
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 937
ОС: астралинукс

Re: Команда PROMPT_COMMAND в совокупности с export HISTFILE создают новые файлы при смене директорий.

Сообщение жучара »

Bizdelnick писал:
11.10.2021 21:56
жучара писал(а):
11.10.2021 21:34
что ж вы так русский язык-то не любите?
Я? Я, вроде бы, на нём с Вами изъясняюсь. А что русские маны отстают от оригинала на 10+ лет в среднем — это я не виноват. Мои любовь к языку и альтруизм не простираются так далеко, чтобы я их все переводил задаром.
жучара писал(а):
11.10.2021 21:34
Всё ж таки хотелось бы пойти дальше и разобраться, благодаря какой именно команде создаётся файл.
Странный вопрос, казалось бы, и вариант ответа на него только один:
жучара писал(а):
11.10.2021 21:34
history -a
Если вы намекаете,что команда history -a создаёт файл истории с указанным именем, (хотя именно об этом в мане ни слова, но это ладно), чтобы в него запихать команды, тогда последовательность действий такая должна быть: сперва меняем директорию, потом командуем history -a и файл создаётся. Но фишка-то в том, что команда history -a из--за того, что запихана внутрь PROMPT_COMMAND, выполняется, как мы выяснили, до смены директории, а не после. Следовательно не может создать файл в новой директории, куда мы вошли. А вы говорите- создаёт.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Команда PROMPT_COMMAND в совокупности с export HISTFILE создают новые файлы при смене директорий.

Сообщение Bizdelnick »

жучара писал(а):
11.10.2021 22:17
команда history -a из--за того, что запихана внутрь PROMPT_COMMAND, выполняется, как мы выяснили, до смены директории, а не после.
Нет, она выполняется каждый раз перед выводом приглашения.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1367
ОС: Slackware

Re: Команда PROMPT_COMMAND в совокупности с export HISTFILE создают новые файлы при смене директорий.

Сообщение UnixNoob »

жучара писал(а):
11.10.2021 22:17
Но фишка-то в том, что команда history -a из--за того, что запихана внутрь PROMPT_COMMAND, выполняется, как мы выяснили, до смены директории, а не после.
Вы пишите команду, она выполняется и затем, перед тем как вы сможете вновь ввести команду, читается содержание переменной PROMPT_COMMAND и уже после этого вы можете вводить новую команду.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: Команда PROMPT_COMMAND в совокупности с export HISTFILE создают новые файлы при смене директорий.

Сообщение olecya »

Вы определили в переменной HISTFILE относительный путь к файлу. А в приглашении командной строки добавляете каждый раз вводимую команду в историю этого файла. Так как файла не существует, он создается. Теперь чтобы вы не делали в командной строке эта команда будет добавлена в этот файл, а если вы поменяете текущую директорию и, следовательно, поменяете путь к файлу истории то получите новый файл с отображением команды перемещения. Например, не трогая переменную HISTFILE запишите в PROMPT_COMMAND='>my_file' и чтобы вы не вводили в командной строке файл будет обновляться или создаваться новый как только на мониторе вам выводят это приглашение: user@debian:~

Добавлено:
По моему например в zsh это '>my_file' не работает. Всеядная 'echo > my_file'
Спасибо сказали:
Ответить