Как установить псевдоним во всех оболочках tty?

Я установил псевдоним в shell tt2, но он не будет работать в других оболочках tty, любая идея, как сделать псевдоним системы?

Вы не можете заставить процесс оболочки использовать новые псевдонимы извне, поэтому запрос на загрузку новых псевдонимов должен будет поступать из каждого экземпляра оболочки на каждом терминале.

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

 reload_aliases () { . ~/.bash_aliases } PROMPT_COMMAND="$PROMPT_COMMAND reload_aliases" 

и определите свои псевдонимы, отредактировав ~/.bash_aliases вместо того, чтобы вводить их в одну оболочку. Обратите внимание, что переменная PROMPT_COMMAND выполняется только после запуска команды, поэтому вам нужно запустить одну команду (например : которая является командой, которая ничего не делает); пустой командной строки недостаточно.

Вы также можете переопределить команду alias для автоматического добавления в файл .bash_aliases , но я рекомендую это, потому что это было бы очень разрушительно, если вы хотите определить псевдоним для конкретной задачи только для одной оболочки. Вы можете добавить определенный псевдоним с его определением в текущую оболочку с alias ALIASNAME >>~/.bash_aliases (замените ALIASNAME на фактическое имя псевдонима).

В zsh вы должны использовать precmd вместо precmd от bash. В отличие от PROMPT_COMMAND от bash, precmd фактически выполняется перед отображением каждого приглашения, поэтому достаточно нажать Enter в приглашении, чтобы вызвать его. Даже zsh не имеет возможности перезагрузить файл псевдонима без вмешательства пользователя.

Кроме того, вы можете заставить вашу оболочку реагировать на сигнал, установив trap . Сигнал SIGUSR1 не используется оболочками, поэтому вы можете использовать его для загрузки своих псевдонимов:

 trap 'reload_aliases' USR1 

(Функция reload_aliases приведена выше). При таком подходе вам нужно отправить сигнал SIGUSR1 во все интерактивные экземпляры вашей оболочки при редактировании списка псевдонимов. Обязательно не отправляйте сигнал на скрипты, потому что действие по умолчанию для этого сигнала – убить оболочку! Нет простого способа перечислить интерактивные оболочки; следующий скрипт, специфичный для Linux, близок, но имейте в виду, что он может случайно закрыть несвязанный процесс из-за условий гонки.

 for pid in $(pgrep bash); do if cd "/proc/$pid" 2>/dev/null && [ -c fd/0 ] && grep '^SigCgt: .............[2367abef]..$' status; then kill -USR1 "$pid" fi done 

Нет необходимости в тяжелых работах, просто измените файл /etc/bashrc . Я знаю, вы можете подумать, что он работает только на текущем tty, но без помощника, он работает. Просто выйдите один раз, а затем войдите снова с любым пользователем, который вам нравится. Вы даже можете проверить это через SSHing или что-то еще.

Но если это не сработало – хотя я считаю, что это так – прочитайте этот файл, это может вам очень помочь: /etc/profile