Forum Clubic

[Résolu] Petit problème avec Bash

Lorsque j’ouvre un terminal avec comme shell bash, j’obtiens :

bash: declare: `': not a valid identifier
bash: declare: `-f': not a valid identifier
bash: declare: `/etc/bash_completion': not a valid identifier
bash: declare: `]': not a valid identifier

(distribution Ubuntu 5.04)
Bon j’avoue, j’ai pas mal trifouiller n’importe comment dans les fichiers de configurations de bash :D, alors j’aimerais savoir comment peut-on résoudre ce problème ?

Merci à vous

regarde dans ton ~/.bashrc, ~/.bash_profile…

Je poste ici les fichiers :

Le fichier ~/.bashrc


# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

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

# don't put duplicate lines in the history. See bash(1) for more options
#export HISTCONTROL=ignoredups

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

# enable color support of ls and also add handy aliases
if [ "$TERM" != "dumb" ]; then
    eval "`dircolors -b`"
    alias ls='ls --color=auto'
    #alias dir='ls --color=auto --format=vertical'
    #alias vdir='ls --color=auto --format=long'
fi

# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(lesspipe)"

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

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color)
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
   ;;
*)
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
   ;;
esac

# Comment in the above and uncomment this below for a color prompt
#PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

# 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

# Define your own aliases here ...
#if [ -f ~/.bash_aliases ]; then
#    . ~/.bash_aliases
#fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
#if [ -f /etc/bash_completion ]; then
#    . /etc/bash_completion
#fi

Le fichier ~/.bash_profile

# ~/.bash_profile: executed by bash(1) for login shells.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/login.defs
#umask 022

# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ]; then
    PATH=~/bin:"${PATH}"
fi


Comme j’ai la flemme de regarder, regarde le mien (d’origine vu que je n’utilise pas bash):
http://kamui.rouch.free.fr/bash/.bashrc
http://kamui.rouch.free.fr/bash/.bash_profile

Anakin2 : C’est marrant ça : A ce que je vois toutes les lignes utilisant -f sont commentées.
Peux tu essayer de tout commenter (mettres des # en début de toutes les lignes deux fichier)?
Est ce que le problème persiste? Si ça te dis qu’il n’y a plus d’erreur, tu décommente bloc par bloc les deux fichiers (en commençant par le .bash_profile) et comme ça tu cernes les lignes qui posent pb petit à petit. C’est comme ça qu’on apprend à débugger.

C’est la méthode générale que je te donne après avoir juste survoler tes fichiers (il y a peut être une erreur évidente…)

Merci fakbill, je verrai ça demain, enfin aujourd’hui plutôt :wink:

@++ :jap:

J’ai tout commenté, et c’est toujours pareil. Vraisemblablement, le problème ne se trouve pas au niveau de la configuration de l’utilisateur mais plutôt de la configuration globale…

Mon fichier /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" -a -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

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

# 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 [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

Si je commente les 3 dernières lignes, le problème disparaît, mais je n’ai plus l’auto complétion…

Up ! :smiley:
J’ai essayé dans un vrai terminal au démarrage, et c’est pareil… c’est à croire que le problème est plus profond… :neutre:

Chez moi ces trois lignes sont commentées mais la complétion fonctionne grâce à…hum…
un source /etc/bash_completion dans mon ~/.bashrc.

Le problème étant que j’ai bricolé un peu pour que ça marche. Je crois que ce que je t’ai dit suffit mais ce n’est pas sûr. Si ça ne marche pas, dis le moi je creuserai :slight_smile:

ps : Les /etc/bash_completion fait quand même 8040 lignes. C’est pour ça qu’il prend si bien en compte la majorité des cas :slight_smile:

Bah même en mettant tout simplement cette commande (sans if et compagnie) ca ne marche pas :S D’ailleurs, en ligne de commande, je lance

source /etc/bash_completion
. /etc/bash_completion

(un espace après le .)

Ca me ressort l’erreur. Le problème viendrait du fichier bash_completion ?

ps : j’ai remplacé les . par source dans les fichiers concernés, on a le droit :??: (apparemment, ca change rien)
@++

Je met le début du fichier bash_completion, peut être y-a-t-il une erreur évidente :smiley:

# Alter the following to reflect the location of this file
#
if [ -n "${FUNCNAME:-}" ]; then
 # we're being sourced from within a function, so we can't use
 # 'declare', as this will create local variables within a function
 BASH_COMPLETION="${BASH_COMPLETION:-/etc/bash_completion}" 2>/dev/null
 BASH_COMPLETION_DIR="${BASH_COMPLETION_DIR:=/etc/bash_completion.d}" \
   2>/dev/null
else
 declare -r BASH_COMPLETION="${BASH_COMPLETION:-/etc/bash_completion}" \
   2>/dev/null
 declare -r \[ -f /etc/bash_completion ] && source /etc/bash_completion 
   BASH_COMPLETION_DIR="${BASH_COMPLETION_DIR:=/etc/bash_completion.d}"\
   2>/dev/null
fi

Chez moi ça passe sans pb donc le pb doit venir de ton fichier bash_completion.
Le mien vient du paquet bash de debian sid.
J’ai aussi un rèp /etc/bash_completion.d qui contient des scripts qui permettent de compléter les commandes spécifiques à debian (comme make-kpkg).

Ubuntu étant basé sur Debian, je peux considérer qu’on est censé avoir le même paquet ? En tout cas, le fichier vient du paquet bash 3.0-13 (version du système de base)

edit : ah oui, j’ai déja réinstallé le paquet pour voir…et ca fait rien :wink:

@tt

zsh fournie une completion très très complete (./configure, make-kpkg, modprobe etc…) par defaut :o Tu sais ce qui te reste à faire :o

Tu peux essayer ça :

Tu rajoutes un .bak devant le nom de tous les fichiers dont on a parlé et tu fais :
apt-get install --reinstall bash (sans le reinstall, ça ne fera rien vu que tu as déjà bash).

Après, tu rajoutes juste un source /etc/bash_completion dans ton bash-rc.

delog,relog et qu’est ce que ça donne? Au moins, tu repartira avec des bases saines :wink:

:smiley: On a eu la même idée, j’étais en train de le faire :slight_smile: J’ai carrément viré le fichier bash_completion (enfin renommé) avant de réinstaller bash et là plus de prob…mais plus d’autocomplétion…C’est bizarre que la réinstallation ne recréé pas un fichier bash_completion…

rouch >> je sais il est déja installé ;), mais ca ne résout pas le problème avec bash :smiley: et puis j’ai quelques problèmes avec aussi

héhé :slight_smile:

Attends que je me rappelle de ce qu’il faut faire pour activer la completion…
Bon il y a le source dans le ~/.bashrc et qu’est ce que j’ai fait d’autre??

“Une astuce toute bête mais utile si on n’a pas fait attention. Les packages bash de la Debian (à vérifier pour les autres distrib) possèdent déjà plein de raccourcis pour la complétion sous bash. Pour les activer, il suffit de décommenter les 3 dernières lignes du fichier /etc/bash.bashrc.”

Hum…ça ne marcherait pas par hasard maintenant…

ps : comme quoi, à chaque fois qu’on bidouille, on ne se rappelle jamais de ce qu’on a fait…

Euh non, puisqu’il n’y a plus de fichier /etc/bash_completion…:smiley: Décommenter les lignes le renverrait vers un fichier qui n’existe plus… :whistle:

Problème résolu ! J’ai retrouvé où j’avais pris le fichier bash_completion (en fait il n’avait pas été créé à l’installation du système (récente), il avait été rajouté par mes soins) :
http://www.caliban.org/bash/index.shtml#completion
(première archive, dedans il y a un fichier bash_completion à placer sur son système)
Bon apparemment, ca marche :slight_smile: Merci à tous :slight_smile:

Regardes dans /usr/share/doc/bash :wink: Mais bon, c’est résolu :slight_smile: