Ubuntu

將“source /etc/profile”放在 /etc/bash.bashrc 中,無法在 ubuntu 16.04 中打開終端視窗

  • April 17, 2019

我將“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% 確定終端關閉的原因是我意外創建的無限循環,其中一個呼叫另一個,另一個呼叫另一個。

我能做些什麼?

問題確實是無限循環。shell讀取/etc/profile,看到它需要讀取/etc/bash.bashrc並這樣做,看到它需要讀取/etc/profile並這樣做,等等。最終shell決定它的遞歸太深並放棄。

在 shell 仍在執行啟動文件時按Ctrl+ 。C你會得到提示。

然後刪除in的包含和/etc/bash.bashrcin/etc/profile的包含。這些文件具有不同的作用:/etc/profile``/etc/bash.bashrc

  • /etc/profile在登錄時讀取並執行諸如設置環境變數之類的操作。它通常由 bash 以外的 shell 執行。
  • /etc/bash.bashrc是 bash 的配置文件,僅用於互動式會話。它應該包含別名和提示等內容。當您在終端中執行 bash 時,Bash 會載入它。

我建議您使用您喜歡的任何發行版創建一個 live-usb。從liveusb打開你的電腦,然後掛載你的/分區

mount /dev/sdX /mnt

/mnt將在您的 liveISO 中。

然後只需使用 nano、vim 或任何其他文本編輯器編輯您的配置並刪除其中一行。

然後umount你的磁碟並重新啟動電腦,它應該可以工作。

引用自:https://unix.stackexchange.com/questions/388579