Почему настройка псевдонима в .profile не работает?

11

Это последняя строка в моем .profile:

alias gl="cd /home/jrenner/glances/glances"

все же даже после перезагрузки я получаю команду, не найденную при наборе gl. Что происходит? Я вошел как правильный пользователь.

talloaktrees
источник
Где вы печатаете gl? Терминал? GUI?
Томас Уорд
1
Никто никогда не обращался к оригиналу, почему? вопрос. Я могу подтвердить, что псевдонимы, определенные в .profile, не работают ни в каком контексте, который я пробовал: вход в текстовую консоль, графические терминалы или что-либо еще, даже если переменные среды из того же файла работают.
Даниэль Малер
@DanielMahler, у тебя есть причина почему?
Магед Саид

Ответы:

4

Я почти уверен, что идея lpanebr сработает, но вот более элегантное решение. Выполните эту команду псевдонима в .bashrc разделе Вот как я это делаю, или некоторые люди предпочитают добавить файл, посвященный псевдониму. Позвони .aliasили как угодно и добавь .aliasв свой.bashrc

Хотел бы я сделать форматирование как @lpanelbr. Интересно, есть ли вики?

Джейсон
источник
1
Что касается форматирования, Askubuntu использует уценку. Пожалуйста, проверьте askubuntu.com/editing-help для деталей.
saji89
1
Почему .bashrcработает, а .profileнет? Кроме того, есть какая-либо причина, почему вы решили назвать псевдоним файла, .alliasа не .alias?
Том
# 1 Насколько я понимаю, .bashrc специфичен для bash, а .profile - для командной строки не-bash. # 2 Я не знаю, что вы имеете в виду. Я могу записать в конце концов. (отредактировано)
Джейсон
7

Есть две связанные причины, по которым псевдонимы не всегда работают, когда помещаются в .profileфайл. Во-первых, файл .profile(или .bash_profile) запускается только для оболочки входа в систему. Если вы запускаете bash в окне терминала под X, ваш эмулятор терминала (например, gnome-termanl), вероятно, не запускает bash в качестве оболочки входа в систему. [У большинства есть возможность изменить это, если вы хотите, но по умолчанию (для gnome-termal в любом случае) это не запускать его как оболочку входа в систему.]
Оболочка будет интерактивной и поэтому .bashrcбудет запущена.

Однако, как правило, bash запускался как оболочка для входа в систему при запуске X-сессии. Таким образом, если в .profileкоманде есть псевдонимы, они будут выполняться вместе с настройкой переменных среды, таких как PATH и т. Д. Когда открывается окно терминала, запускается новый экземпляр bash для запроса и выполнения команд в этом окне терминала. В отличие от переменных среды, псевдонимы нельзя экспортировать из одного экземпляра bash в новый, запущенный им. Таким образом, псевдонимы не передаются новой оболочке.

Чтобы увидеть это, попробуйте этот эксперимент:

export ROBERT=bob
alias james=jimmy
echo $ROBERT
alias james
bash               #start a new bash instance
echo $ROBERT
alias james
exit               #end the new bash instance and revert to the original one
echo $ROBERT
alias james

Обратите внимание, что .bashrcbash не запускается при запуске в качестве оболочки входа в систему. Таким образом, размещение ваших псевдонимов не всегда будет работать, если вы .bashrcне получены от вас .profile, что является очень распространенной практикой.

Тони МакГрегор
источник
Проверено: добавление source .bashrcв .bash_profileразрешенном множестве псевдонимов в .bashrc к работе.
Древесная рыба Чжан
Похоже, это должен быть правильный ответ. Кроме того, в Ubuntu просто добавьте свои псевдонимы в ~/.bash_aliases. Это правильный способ сделать это. (прочитайте файл .bashrc для деталей).
Эмилио М.
0

Если вы используете bash ( echo $SHELL) в качестве интерпретатора оболочки, я думаю, что будет лучше (или, возможно, единственным способом), если вы определите свою собственную функцию CD.

Отредактируйте ваш .bashrcфайл и добавьте следующее в конце:

# my custom functions:
function gl () {
   cd /home/jrenner/glances/glances/
}

Вы также можете расширить его так:

# my custom functions:
function cdw () {
   cd /home/jrenner/glances/glances/$1
   ls
}

и перейти непосредственно в подкаталог и перечислить его содержимое.

lpanebr
источник
1
Это может быть хорошим предложением, но это не ответ, так как он не объясняет, почему aliasдиректива, помещенная в .profileфайл, терпит неудачу.
Том
0
$ bash #start a new bash instance

Это была проблема с моим сервером. Простой source .profileне работал по какой-то причине

Младен Янетович
источник
0

Правильный способ сделать это в Ubuntu - добавить свой псевдоним ~/.bash_aliases. Создайте файл, если он не существует.

Этот файл (если имеется) вызывается по умолчанию ~/.bashrc, и псевдоним будет доступен и в эмуляторах вашего терминала.

Эмилио М.
источник