# ~/.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
;这是一种包含存储在例如登录 shell 中的用户设置的方法~/.bashrc
,而登录 shell 通常不会提供来源~/.bashrc
;
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
这部分检查是否~/bin
存在,如果是的话,则将其添加~/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$BASH_VERSION
在调用时设置,检查是否$BASH_VERSION
具有非零长度是确定文件本身是否由 Bash 实例提供的强大方法。
这就是为什么在 Ubuntu 上调用 Bash 作为登录 shell 时,会包含存储在中的用户设置~/.bashrc
(对于其他发行版不一定如此);Bash 本身仅~/.profile
在作为登录 shell 调用时才提供源代码,这是一种解决这个问题的方法;
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
。