Псевдоніми 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
перевіряється, чи є поточна оболонка bash (і чи .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
оскільки вони залишатимуться невизначеними в оболонках, що не входять. На відміну від більшої частини середовища, що стосується панцирної оболонки, псевдоніми не експортуються до дитячих оболонок:
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
з: якщо ви це зробите, то вони будуть визначені тільки для входу в оболонках, а не для їх дочірніх оболонок.
Нарешті, зауважте, що на відміну від користувача .bashrc
за замовчуванням, /etc/bash.bashrc
файл за замовчуванням не містить нічого про псевдоніми. Дещо незвично надавати користувачам псевдоніми у файлі, де вони не можуть їх редагувати чи вимикати. (Звичайно, вони все ще можуть це зробити, переосмисливши свої визначення у своїх місцевих.bashrc
, .bash_aliases
або в іншому місці.)
Подальше читання