Объясняя содержание файла ~/.profile

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Может ли кто-нибудь объяснить содержание ~/.profile файл? Поэтому, когда вы входите в ~/.profile файл Что означает все написанное?

1 ответ

Решение

Упрощенная версия:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

Это проверяет детали ~/.profile сам по себе источником экземпляра Bash, и, если это так, источники в свою очередь ~/.bashrc; это способ включить настройки пользователя, хранящиеся в ~/.bashrc например, также в оболочках входа в систему, которые обычно не являются источником ~/.bashrc;

if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Эта часть проверяет, ~/bin существует, и если это так, то prepends ~/bin к текущей стоимости $PATH; это сделано для того, чтобы потенциальные исполняемые файлы / скрипты присутствовали в ~/bin иметь приоритет над исполняемыми файлами / скриптами, присутствующими в других путях, включенных в $PATH (например, поместив исполняемый файл с именем cat в ~/binпри запуске cat этот исполняемый файл будет запущен вместо обычного /bin/cat).


Подробная версия:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

Эта часть проверяет, является ли расширение $BASH_VERSION имеет ненулевую длину (if [ -n "$BASH_VERSION" ]), и если это так, если расширение $HOME/.bashrc существует и является обычным файлом (if [ -f "$HOME/.bashrc" ]), расширение $HOME/.bashrc Источник.

Поскольку Баш устанавливает $BASH_VERSION при вызове, проверяя, $BASH_VERSION ненулевая длина - это надежный способ определить, является ли сам файл источником экземпляра Bash.

Вот почему при вызове Bash в качестве оболочки входа в Ubuntu пользовательские настройки сохраняются в ~/.bashrc включены (это не обязательно так для других дистрибутивов); Сам Bash только источники ~/.profile когда вызывается как оболочка входа в систему, и это способ обойти это;

if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Эта часть проверяет, является ли расширение $HOME/bin существует и является каталогом (if [ -d "$HOME/bin" ]), и, если это так, предполагает расширение $HOME/bin к текущей стоимости $PATH (PATH="$HOME/bin:$PATH"; $HOME обычно устанавливается в домашний каталог пользователя).

Это сделано для того, чтобы потенциальные исполняемые файлы / скрипты присутствовали в расширении $HOME/bin иметь приоритет над исполняемыми файлами / скриптами, присутствующими в других путях, включенных в $PATH,

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