1 votes

L'invite Bash est perdue et affiche maintenant une erreur dans PuTTY

Le terminal de mon VPS ressemblait à l'origine à ceci dans PuTTY :

[root@user ~]#

Aujourd'hui, il se présente comme suit :

-bash-4.1#

Voici l'erreur qui s'affiche maintenant :

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

Je ne sais pas ce qui s'est passé pour provoquer cela.

Comment puis-je revenir à ce qui était prévu ? [root@user ~]# ?

En /root/.bash_profile ressemble à cela à l'intérieur :

PuTTY screenshot of the contents of “/root/.bash_profile”

1voto

Alex Points 6039

Retirer ~/.bash_profile et ajouter le contenu ci-dessous à ~/.profile
Cela fonctionnerait également avec d'autres coquillages.

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

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

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

N'oubliez pas comment les différents shells traitent les fichiers de démarrage.
Voici diagramme .

Si vous utilisez un programme Windows pour modifier le contenu de fichiers script ou de fichiers de configuration sur des ordinateurs basés sur Unix, vous devez toujours garder à l'esprit que les fins de ligne sont différentes dans ces deux systèmes d'exploitation. Sous Linux, la fin de ligne est le caractère 0x0A . Soit vous utilisez des éditeurs qui permettent de passer d'une fin de ligne Unix à une fin de ligne Windows, tels que Notepad++ ou l'utiliser sous Windows vim éditeur.

1voto

Giacomo1968 Points 48326

La cause du problème et la manière de le résoudre sont deux choses différentes. Ce que je sais, c'est qu'il s'agit du contenu d'un Bash assez standard. .bash_profile 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

Et voici le contenu d'un Bash assez standard .bashrc 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

En outre, le contenu de la rubrique /etc/bashrc sur RedHat 7 sont les suivants :

# /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 "\033]0;%s@%s:%s\007" "${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 "\033k%s@%s:%s\033\\" "${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

Notez également que vous ne devez éditer des fichiers de ce type qu'avec un éditeur de texte pur. Si vous utilisez un traitement de texte ou quelque chose de plus "fantaisiste" que cela, vous risquez d'ajouter à votre fichier des éléments parasites et des "gremlins" qui étoufferont le système.

0voto

user10216038 Points 225

Comme Alex l'a mentionné, il se peut que vous ayez créé par inadvertance un problème de fin de ligne. En supposant que vous ayez mis en place l'utilitaire, essayez :

dos2unix /root/.bash_profile

Cette opération convertit les caractères de la nouvelle ligne.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X