Псевдоніми 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або в іншому місці.)
Подальше читання