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

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

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

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

1
задан 26 March 2013 в 08:56

2 ответа

Есть две связанные причины, по которым псевдонимы не всегда работают, когда они помещаются в файл .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, что является очень распространенной практикой.

4
ответ дан 25 May 2018 в 00:09
  • 1
    Проверено: добавление source .bashrc в .bash_profile позволило использовать псевдоним, установленный в .bashrc. – Treefish Zhang 3 September 2017 в 17:00

Если вы используете 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
}

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

0
ответ дан 25 May 2018 в 00:09
  • 1
    Это может быть тонкое предложение, но это не ответ, так как он не объясняет, почему директива alias, помещенная в файл .profile, терпит неудачу. – Tom 5 April 2015 в 01:58

Другие вопросы по тегам:

Похожие вопросы: