Ubuntu .profile和.bashrc遇到问题

时间:2018-10-13 20:03:37

标签: linux bash ubuntu apache-kafka .profile

我是Linux新手。我目前正在在线学习Kafka的安装教程。它说将我的kafka bin目录的路径添加到我的.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 directories
DOCKER="/usr/local/bin/docker-compose"
PATH="$HOME/bin:$HOME/.local/bin:$PATH:$DOCKER"
# Ubuntu make installation of Ubuntu Make binary symlink
PATH=/home/username/.local/share/umake/bin:$PATH
cat ~/.ssh/config.d/* > ~/.ssh/config
PATH="$PATH:/home/username/softwares/kafka/kafka_2.11-1.0.0/bin"

此后,我在$ PATH上执行了回显,我可以看到kafka路径已添加到PATH中。发布后,我键入了kafka,然后选择了选项卡,然后我可以看到与kafka相关的可选命令。

然后,该教程告诉您编辑.bashrc文件。它已经在那里。这是一个很大的文件。我在文件末尾添加了以下行(根据教程):

. ~/.profile

在那之后,我按照教程打开了另一个终端,看到在kafka和tab之后,我仍然得到所有与kafka相关的选项。我在终端上看到,没有得到我的用户名,这是一个空白的终端窗口。然后,我编辑.bashrc以删除添加的行,然后尝试打开新的终端,然后我可以在终端上看到我的用户名。然后我关闭了所有终端。打开一个新的,然后键入kafka和tab,我没有像以前那样得到任何选择。然后打开.profile文件,可以看到仍然添加了kafka路径。然后,我尝试回显$ PATH,这一次,kafka路径不存在。

我真的很困惑这里发生了什么。您能否解释一下,让我知道每次打开终端时如何加载.profile,为什么当我在PATH上执行回显操作时,为什么我再也看不到kafka路径?

1 个答案:

答案 0 :(得分:0)

正在发生的事情

采购:

当您运行命令. somefile时,您会将文件采购到当前Shell中,这基本上意味着它会运行当前Shell中somefile中的每个命令。

某些文件在某些​​条件下会自动获得。

外壳类型:

交互式外壳程序:用于键入命令和接收输出的外壳程序。在bash中,您可以通过以下方式创建交互式shell:

  1. 使用bash shell登录
  2. 从终端运行bash

登录外壳:第一次登录时创建的外壳。即。第一次SSH到服务器或没有GUI的计算机时收到的shell。

非登录交互式Shell:不是登录Shell而是交互式的Shell。即。打开桌面终端应用程序时创建的外壳程序,或者通过ssh登录后运行bash时获得的外壳程序

〜/ .profile和〜/ .bash_profile,以及〜/ .bash_login可以通过登录外壳程序自动获取。因此,您首次登录或手动获取(。).profile时可能会获得此路径。 >

请注意,如果.bash_profile存在并且可读,则Bash将不会读取.bash_login或.profile。 https://askubuntu.com/questions/98433/run-a-script-on-login-using-bash-login

登录外壳会按以下顺序查找...“〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从第一个存在且可读的命令中读取并执行命令” {{1 }}(信用:cdarke)

之后,您可能试图在桌面终端或辅助bash外壳中打开bash,但由于只有〜/ .bashrc而不是〜/ .profile来自非登录交互式Shell,因此您没有获得新路径,而且您的〜/ .bashrc中没有此PATH指令

解决方案:

man bash添加到您的PATH="$PATH:/home/username/softwares/kafka/kafka_2.11-1.0.0/bin"而不是~/.bashrc

参考:

https://serverfault.com/questions/261802/what-are-the-functional-differences-between-profile-bash-profile-and-bashrc

注意:

不用担心它不会显示在登录shell中,因为您看到.profile调用.bashrc

~/.profile

感谢cdarke对术语进行更正,并注意登录配置的工作原理