Bash prompt perdido e agora mostra erro no PuTTY

1

O terminal no meu VPS originalmente se parecia com isso no PuTTY:

[root@user ~]#

Então agora está assim:

-bash-4.1#

Este é o erro que aparece agora:

-bash: /root/.bash_profile: line 6: syntax error near unexpected token 'fi'
-bash: /root/.bash_profile: line 6: 'fi'

Eu não sei o que aconteceu para causar isso.

Como faço para voltar ao esperado [root@user ~]# ?

O /root/.bash_profile está assim dentro:

    
por Joao 15.08.2018 / 21:39

3 respostas

1

O que causou o problema versus como resolvê-lo são duas coisas diferentes. O que eu sei isso é o conteúdo de um arquivo Bash .bash_profile razoavelmente padronizado; via RedHat 7:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

E esses são os conteúdos de um arquivo Bash .bashrc razoavelmente padronizado; via RedHat 7:

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

Além disso, o conteúdo de /etc/bashrc no RedHat 7 é o seguinte:

# /etc/bashrc

# System wide functions and aliases
# Environment stuff goes in /etc/profile

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

# are we an interactive shell?
if [ "$PS1" ]; then
  if [ -z "$PROMPT_COMMAND" ]; then
    case $TERM in
    xterm*|vte*)
      if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
          PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
      elif [ "${VTE_VERSION:-0}" -ge 3405 ]; then
          PROMPT_COMMAND="__vte_prompt_command"
      else
          PROMPT_COMMAND='printf "3]0;%s@%s:%s
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
7" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' fi ;; screen*) if [ -e /etc/sysconfig/bash-prompt-screen ]; then PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen else PROMPT_COMMAND='printf "3k%s@%s:%s3\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' fi ;; *) [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default ;; esac fi # Turn on parallel history shopt -s histappend history -a # Turn on checkwinsize shopt -s checkwinsize [ "$PS1" = "\s-\v\\$ " ] && PS1="[\u@\h \W]\$ " # You might want to have e.g. tty in prompt (e.g. more virtual machines) # and console windows # If you want to do so, just add e.g. # if [ "$PS1" ]; then # PS1="[\u@\h:\l \W]\$ " # fi # to your custom modification shell script in /etc/profile.d/ directory fi if ! shopt -q login_shell ; then # We're not a login shell # Need to redefine pathmunge, it get's undefined at the end of /etc/profile pathmunge () { case ":${PATH}:" in *:"$1":*) ;; *) if [ "$2" = "after" ] ; then PATH=$PATH:$1 else PATH=$1:$PATH fi esac } # By default, we want umask to get set. This sets it for non-login shell. # Current threshold for system reserved uid/gids is 200 # You could check uidgid reservation validity in # /usr/share/doc/setup-*/uidgid file if [ $UID -gt 199 ] && [ "'/usr/bin/id -gn'" = "'/usr/bin/id -un'" ]; then umask 002 else umask 022 fi SHELL=/bin/bash # Only display echos from profile.d scripts if we are no login shell # and interactive - otherwise just process them to set envvars for i in /etc/profile.d/*.sh; do if [ -r "$i" ]; then if [ "$PS1" ]; then . "$i" else . "$i" >/dev/null fi fi done unset i unset -f pathmunge fi # vim:ts=4:sw=4

Observe também que você só deve editar arquivos como este com um editor de texto puro. Se você usar um processador de texto ou algo “mais sofisticado” do que isso, acréscimos extras e “gremlins” podem ser adicionados ao seu arquivo, o que deixaria o sistema entupido.

    
por 15.08.2018 / 22:32
1

Remover ~/.bash_profile e adicionar conteúdo abaixo a ~/.profile
funcionaria com outras conchas também.

# ~/.profile: executed by Bourne-compatible login shells.

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

export PATH="${PATH}:${HOME}/bin"

Lembre-se de como diferentes shells processam arquivos de inicialização.
Aqui está o diagrama .

Se você estiver usando programas do Windows para editar o conteúdo de arquivos de script ou arquivos de configuração em computadores baseados em Unix, deve sempre ter em mente que as linhas que terminam nesses dois sistemas operacionais são diferentes. No Linux, fim de linha - é o caractere 0x0A . Use editores que ofereçam suporte à troca entre Unix e Windows line ending, como Notepad++ ou use portado para o Windows vim editor.

    
por 15.08.2018 / 22:32
0

Como Alex mencionou, você pode ter criado inadvertidamente um problema de fim de linha. Supondo que você tenha o utilitário em vigor, tente:

dos2unix /root/.bash_profile

Isso converterá os novos caracteres de linha.

    
por 15.08.2018 / 23:18

Tags