Псевдонимы Bash должны находиться в файлах .bash_aliases
или .bashrc
в отдельных домашних каталогах. Если вам необходимо создать глобальные псевдонимы bash, они могут войти /etc/bash.bashrc
, но зачастую лучше просто добавить их в файлы .bash_aliases
или, чтобы они были унаследованы вновь созданными пользователями..bashrc
/etc/skel
Это практически всегда неправильно определить псевдоним в в .profile
, .bash_profile
или /etc/profile
.
Чтобы понять почему, нужно понимать, при каких условиях запускаются команды из каждого из этих файлов . Есть неправильные представления об этом, о которых я расскажу ниже.
Даже если вы хотите определить псевдонимы для нескольких пользователей, вы должны быть знакомы с тем, как они определены для отдельных пользователей, чтобы вы могли выбрать лучший способ сделать то, что вам нужно.
Псевдонимы для индивидуальных пользователей
Особенно, если вы используете графический интерфейс, большинство ваших интерактивных оболочек, вероятно, не являются оболочками входа в систему . Даже если вы никогда не используете графический интерфейс, вы, вероятно, все еще используете не входящие в систему оболочки с некоторой частотой. Вы хотите, чтобы ваши псевдонимы работали в этих оболочках.
Особенно, если вы когда-либо входите не графически в виртуальную консоль или через SSH , вы, вероятно, иногда используете оболочки входа в систему. Таким образом, вы хотите, чтобы ваши псевдонимы работали и в интерактивных оболочках входа.
Когда запускается интерактивная оболочка без регистрации , она поступает.bashrc
в домашний каталог пользователя. По умолчанию в Ubuntu каждый пользователь .bashrc
сам получает исходный код .bash_aliases
, если он существует.
- Для источника файл является причиной его содержимое будет работать в текущей оболочке. Изменения в среде оболочки, внесенные в исходный файл, сохраняются даже после выполнения всех команд в файле.
Чтение комментариев по умолчанию в Ubuntu .bashrc
показывает, что официально предполагается, что псевдонимы входят .bashrc
или .bash_aliases
. .bashrc
уже содержит некоторые определения псевдонимов (запустите, grep '^[[:blank:]]*alias' ~/.bashrc
чтобы увидеть их), и дает явный совет о том, куда помещать новые такие определения:
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Но как насчет интерактивных оболочек входа ? Вместо .bashrc
входа в систему источник оболочки .profile
.
- ... Если не
.bash_login
существует, то вместо этого он получает.
- ... Если не
.bash_profile
существует, то вместо этого он получает.
Тем не менее, хорошая новость заключается в том, что по умолчанию в Ubuntu, команды в .bashrc
будет также работать в интерактивных оболочек входа в систему, так как по умолчанию .profile
проверяет , является ли текущая оболочка Баш (если .bashrc
есть), и если да, то источники .bashrc
:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Я предлагаю пользователям определять новые псевдонимы bash .bash_aliases
в своих домашних каталогах (создавая их, если они еще не существуют). Это особенно чистый и простой способ сделать определения псевдонимов постоянными на уровне пользователя.
Псевдонимы не должны быть определены в,.profile
потому что они будут оставаться неопределенными в оболочках без входа в систему. В отличие от большей части среды оболочки bash, псевдонимы не экспортируются в дочерние оболочки:
ek@Io:~$ alias hi='echo "Greetings, $USER!"'
ek@Io:~$ hi
Greetings, ek!
ek@Io:~$ bash
ek@Io:~$ hi
hi: command not found
В частности, по умолчанию большинство настольных сред .profile
требуют графического входа, но:
- Это не обязательно выполняется оболочкой bash, поэтому определения псевдонимов могут даже не обрабатываться, и что более важно
- даже если определения псевдонимов обрабатываются, они не передаются дочерним процессам . В частности, они не передаются оболочкам, созданным открытием окна терминала!
Псевдонимы не должны быть определены в .bash_profile
(или .bash_login
) по той же причине, но и по другой причине. Наивно создавая один из этих файлов и помещая в него только определения псевдонимов, можно избежать .profile
запуска любого кода !
В ситуациях , когда .bash_profile
или на .bash_login
самом деле полезно, как правило , один источники .profile
где - то в них, решает эту проблему. (Тогда единственная оставшаяся проблема заключается в том, что, как и в случае .profile
, определение псевдонимов в .bash_profile
или .bash_login
работает неправильно.)
Псевдонимы для новых индивидуальных пользователей, автоматически
Когда создается учетная запись пользователя того типа, который предназначен для представления реального человека, обычно создается новый каталог, служащий их домашним каталогом. Содержимое /etc/skel
затем копируется в их домашний каталог. Вот как несколько пользователей начинают с некоторых похожих файлов конфигурации в своих домашних каталогах. В Ubuntu, это включает в себя .profile
, .bashrc
и некоторые другие файлы.
Чтобы изменить псевдонимы, определенные для новых пользователей, вы можете просто вставить их /etc/skel/.bash_aliases
(вам придется их создать) или /etc/skel/.bashrc
.
Если вы редактируете уже существующий файл, /etc/skel
вы можете сначала создать его резервную копию /etc/skel
, но не следует помещать резервную копию , иначе он также будет скопирован в домашние каталоги новых пользователей.
Вероятно, это лучший способ добавить новые псевдонимы для нескольких пользователей. Существующие пользователи могут просто добавлять псевдонимы сами. Если вы определите псевдонимы в /etc/skel/.bash_aliases
, вы можете просто направить их в этот файл, который они могут скопировать в свои домашние каталоги (или добавить в свой собственный .bash_aliases
файл).
Пользователь может отменить определение псевдонима. Кроме того, псевдонимы не очень устойчивы ; они работают только в определенных обстоятельствах. Если вам нужно создать новую команду, которая работает постоянно, для всех , вы не должны реализовывать эту команду как псевдоним. И вы не можете успешно навязывать псевдонимы пользователям, которые не хотят их - они могут просто unalias
их.
Глобальные псевдонимы, для всех пользователей
Хотя я советую вам избегать такого подхода, вы можете определить псевдонимы в глобальном /etc/bash.bashrc
файле. Затем они будут определены как для интерактивных оболочек без входа в систему, так и для интерактивных оболочек входа в систему. Причина в том, что до того , как любой из файлов в домашнем каталоге пользователя получен:
- Оболочки входа в систему (и только оболочки входа в систему и другие процессы, ведущие себя как оболочки входа в систему) запускают команды
/etc/profile
автоматически.
- Только не входящие в систему оболочки запускают команды
/etc/bash.bashrc
автоматически, но
- По умолчанию Ubuntu
/etc/profile
проверяет, является ли запущенная оболочка bash (и, если /etc/bash.bashrc
существует), и, если да, источниками /etc/bash.bashrc
.
Это аналогично тому, как пользователь по умолчанию получает .profile
источник для пользователя, .bashrc
если оболочкой является bash (как подробно описано выше).
Вот как выглядит этот код по умолчанию /etc/profile
:
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
Этот блок также выполняет другие задачи. В частности, внешний if
проверяет, может ли оболочка быть интерактивной (проверяя, чтобы текст приглашения не был пустым), затем проверяет, является ли текущая оболочка bash, и источники, /etc/bash.bashrc
если она есть, и, если нет, выполняет некоторую работу для bash. , уже сделано в /etc/bash.bashrc
.
Вы не должны определять глобальные псевдонимы /etc/profile
по той же причине, по которой пользователи не должны определять их в своих локальных .profile
s: если вы это сделаете, они будут определены только для оболочек входа в систему, а не для их дочерних оболочек.
Наконец, обратите внимание, что, в отличие от пользователя .bashrc
по умолчанию, /etc/bash.bashrc
файл по умолчанию не содержит ничего о псевдонимах. Несколько необычно давать псевдонимы пользователям в файле, где они не могут их редактировать или отключать. (Конечно, они все еще могут сделать , что, перекрывая их определения в их местных .bashrc
, .bash_aliases
или в другом месте.)
Дальнейшее чтение