作为这个帖子据说,~/.bashrc
在我使用的 Ubuntu 12.04 LTS Server 中会自动获取。我不知道他从哪里得到这个信息,但由于它还没有被否决,我相信这是真的。
我使用这个脚本来检查它是否有来源:
if [ -f ~/.bashrc ]; then
echo "Not sourced!";
fi
仅供参考:目前的权限是 775,所有者是我。
那么为什么我的~/.bashrc
没有来源?
答案1
我们发现,你.profile
的主目录中没有文件。查看 bash 手册这里用于 Bash 启动文件。
为自己创建一个 .profile:
nano ~/.profile
将此文本插入该文件(从 Debian Squeeze 复制):
# ~/.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
提示:如果您正在创建新用户,请使用开关-m
为其创建目录并放置默认文件,例如:sudo useradd example -m -d /home/example
答案2
您可以使用 bash 详细模式准确地看到执行的内容。
对于非登录 shell:
$ bash -v 2>&1 | less
对于登录 shell:
$ bash -vl 2>&1 | less
我手头没有 12.04 系统,因此无法确认使用登录 shell 时 .bashrc 是否执行。我相当确定是执行的。如果不是,我猜您或代表您调用 bash 的程序没有指定登录 shell。例如通过 ssh 执行远程命令。
ssh 获取 shell 并生成登录 shell
$ ssh remotehost
ssh 调用远程命令不会生成登录 shell
$ ssh remotehost remotecommand
另请参阅 bash 手册页 --norc 选项,其中提到如果 bash 以 sh 形式调用,则此选项默认启用。这曾经很重要,但现在 ubuntu 已将 sh 改为 dash,而不是 bash,因此就不那么重要了。