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 ?
# ~/.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
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…)
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…
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
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
Je met le début du fichier bash_completion, peut être y-a-t-il une erreur évidente
# 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
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
On a eu la même idée, j’étais en train de le faire 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 et puis j’ai quelques problèmes avec aussi
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…
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 Merci à tous