将“source /etc/profile”放入 /etc/bash.bashrc 并无法在 ubuntu 16.04 中打开终端窗口

将“source /etc/profile”放入 /etc/bash.bashrc 并无法在 ubuntu 16.04 中打开终端窗口

我将“source /etc/profile”放入 /etc/bash.bashrc 中,并且无法在 ubuntu 16.04 中打开终端窗口,现在,每当我尝试打开终端窗口时,它都会在几秒钟后关闭。在那几秒钟内,没有提示,也没有命令。

我的 /etc/bash.bashrc 看起来像

# System-wide .bashrc file for interactive bash(1) shells.

# To enable the settings / commands in this file for login shells as well,
# this file has to be sourced in /etc/profile.

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

source /etc/profile
alias login="sudo login"

# set a fancy prompt (non-color, overwrite the one in /etc/profile)
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

# Commented out, don't overwrite xterm -T "title" -n "icontitle" by default.
# If this is an xterm set the title to user@host:dir
#case "$TERM" in
#xterm*|rxvt*)
#    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
#    ;;
#*)
#    ;;
#esac

# enable bash completion in interactive shells
#if ! shopt -oq posix; then
#  if [ -f /usr/share/bash-completion/bash_completion ]; then
#    . /usr/share/bash-completion/bash_completion
#  elif [ -f /etc/bash_completion ]; then
#    . /etc/bash_completion
#  fi
#fi

# sudo hint
if [ ! -e "$HOME/.sudo_as_admin_successful" ] && [ ! -e "$HOME/.hushlogin" ] ; then
    case " $(groups) " in *\ admin\ *|*\ sudo\ *)
    if [ -x /usr/bin/sudo ]; then
    cat <<-EOF
    To run a command as administrator (user "root"), use "sudo <command>".
    See "man sudo_root" for details.

    EOF
    fi
    esac
fi

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-not-found ]; then
    function command_not_found_handle {
            # check because c-n-f could've been removed in the meantime
                if [ -x /usr/lib/command-not-found ]; then
           /usr/lib/command-not-found -- "$1"
                   return $?
                elif [ -x /usr/share/command-not-found/command-not-found ]; then
           /usr/share/command-not-found/command-not-found -- "$1"
                   return $?
        else
           printf "%s: command not found\n" "$1" >&2
           return 127
        fi
    }
fi

这是我的/etc/profile

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
export NODE_REPL_HISTORY=""
unset HISTFILE
set +o history
alias login="sudo login"

if [ "$PS1" ]; then
  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi 

我 99% 确定终端关闭的原因是我不小心创建的无限循环,其中一个调用另一个,另一个调用另一个。

我能做些什么?

答案1

问题确实是无限循环。 shell 读取/etc/profile,发现它需要读取/etc/bash.bashrc并执行此操作,发现它需要读取/etc/profile并执行此操作,等等。最终 shell 认为它递归得太深并放弃。

当 shell 仍在处理启动文件时按Ctrl+ 。C您会收到提示。

然后删除包含 in/etc/bash.bashrc/etc/profile包含/etc/profilein /etc/bash.bashrc。这些文件具有不同的作用:

  • /etc/profile在登录时读取并执行诸如设置环境变量之类的操作。它通常由 bash 以外的 shell 执行。
  • /etc/bash.bashrc是bash的配置文件,仅用于交互式会话。它应该包含别名和提示等内容。当您在终端中运行 bash 时,Bash 会加载它。

答案2

我建议您使用您喜欢的任何发行版创建一个 live-usb。从 liveusb 打开你的计算机,然后安装你的/分区

mount /dev/sdX /mnt

/mnt将在您的 liveISO 中。

然后只需使用 nano、vim 或任何其他文本编辑器编辑您的配置并删除这些行之一。

然后umount你的磁盘并重新启动计算机,它应该可以工作。

相关内容