~/.bashrc 在 12.04 lts 中未自动获取

~/.bashrc 在 12.04 lts 中未自动获取

作为这个帖子据说,~/.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,因此就不那么重要了。

相关内容