"source /etc/profile"을 /etc/bash.bashrc에 넣고 우분투 16.04에서 터미널 창을 열 수 없습니다

"source /etc/profile"을 /etc/bash.bashrc에 넣고 우분투 16.04에서 터미널 창을 열 수 없습니다

"source /etc/profile"을 /etc/bash.bashrc에 넣었는데 우분투 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

문제는 실제로 무한 루프입니다. 쉘은 읽고 /etc/profile, 읽어야 할 것을 찾아 /etc/bash.bashrc이를 수행하고, 읽어야 할 것을 찾아 /etc/profile이를 수행하는 등의 작업을 수행합니다. 결국 쉘은 너무 깊게 재발한다고 결정하고 포기합니다.

쉘이 시작 파일을 처리하는 동안 +를 누르십시오 Ctrl. C메시지가 표시됩니다.

그런 다음 포함 /etc/bash.bashrc/etc/profile포함 /etc/profile을 삭제합니다 /etc/bash.bashrc. 이러한 파일은 다양한 용도로 사용됩니다.

  • /etc/profile로그인 시 환경 변수 설정 등의 작업을 읽고 수행합니다. 일반적으로 bash 이외의 쉘에 의해 실행됩니다.
  • /etc/bash.bashrc대화형 세션에만 사용되는 bash 구성 파일입니다. 별칭 및 힌트와 같은 항목이 포함되어야 합니다. Bash는 터미널에서 bash를 실행할 때 이를 로드합니다.

답변2

원하는 배포판을 사용하여 라이브 USB를 만드는 것이 좋습니다. liveusb에서 컴퓨터를 열고 /파티션을 마운트하세요.

mount /dev/sdX /mnt

/mntliveISO에 있을 것입니다.

그런 다음 nano, vim 또는 기타 텍스트 편집기를 사용하여 구성을 편집하고 다음 줄 중 하나를 삭제하세요.

그런 다음 umount디스크를 사용하고 컴퓨터를 다시 시작하면 작동합니다.

관련 정보