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

7

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

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

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

    
задан talloaktrees 26.03.2013 в 02:56
источник

3 ответа

3

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

Желаю, чтобы я мог форматировать, как @lpanelbr. Интересно, есть ли wiki?

    
ответ дан Jason 26.03.2013 в 03:43
источник
4

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

Однако, как правило, bash запускается в качестве оболочки входа в систему при запуске X-сеанса. Поэтому, если в .profile есть команды alias, они будут выполняться вместе с настройкой переменных среды, таких как 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

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

    
ответ дан Tony McGregor 22.09.2016 в 06:55
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/
   ls
}

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

    
ответ дан lpanebr 26.03.2013 в 03:35