Tengo este problema después de actualizar Lubuntu de 12.10 a 13.04.
Presiono Ctrl+ Alt+ 1, introduzca usuario, contraseña, espere dos segundos y obtener: ♦: command not found"
. Después de este mensaje, puedo escribir comandos sin problemas, pero ¿qué es?
echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/vitaly/bin:/usr/java/jdk1.7.0_17/bin
Mi .bashrc
archivo es:
# ~/.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
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# 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
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
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 ! 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
Mi .profile
archivo es:
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# 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/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
El archivo /etc/profile
está aquí: http://paste.ubuntu.com/5781361/
command-line
login
lubuntu
tty
Vitaly Zdanevich
fuente
fuente
echo $PATH
? ( Edítelo en su pregunta y luego responda).echo $PATH
a mi pregunta.Respuestas:
Solución alternativa
Primero, creo que te refieres cuando entras en tty1 - Ctrl+ Alt+ F1.
Ahora, creo que está sucediendo lo que ha dicho muy probablemente porque tiene un carácter extraño, como ♦ ( diamantes carácter traje o la tarjeta de identificación especial para un moderador askubuntu ) en
~/.bashrc
o~/.profile
archivo u otro archivo que contiene varios comandos de inicialización.Como puede ver en la siguiente imagen,
~/.bashrc
edité el archivo poniendo dentro del carácter ♦ en una sola línea. Como resultado, cuando abro el terminal, aparece el problema descrito por usted:Está sucediendo lo mismo cuando entro en tty1 con Ctrl+ Alt+ F1.
Los archivos que contienen comandos de inicialización cuando se invoca un shell:
/etc/profile
,/etc/bashrc
,~/.bash_login
,~/.profile
,~/.bashrc
,~/.bash_aliases
y tal vez otros. Ver archivos de inicialización de Shell .Para verificar rápidamente si uno de estos archivos tiene algo mal dentro, puede usar el
source
comando. Por ejemplo:Solución final
Después de inspeccionar
/etc/profile
desde http://paste.ubuntu.com/5781361/ , encontré que en la línea 31 hay "Anulación de derecha a izquierda" -‮
carácter unicode. Simplemente abra el/etc/profile
archivo consudo -H gedit /etc/profile
, asegúrese de eliminar este extraño personaje y el problema desaparecerá.Como diversión, en HTML, por ejemplo, si inserta este carácter unicode usando el código decimal (
‮
) delante de una línea, mire lo que está sucediendo:Otra solución más generalizada.
Encontraremos el comando exacto que causa el error usando un " trampa ".
Primero, tenemos que hacer un nuevo archivo de script en el
~/bin
directorio, llamémoslolib.trap.sh
(gedit ~/bin/lib.trap.sh
), con lo siguiente dentro:Ahora, lo único que debe hacer es colocar la siguiente línea al comienzo del archivo
/etc/profile
(sudo -H gedit /etc/profile
):Cambio
<user_name>
con su nombre de usuario. De esta manera, todos los archivos que contienen comandos de inicialización cuando se invoca un shell pasarán por la "trampa".Para probar si hay un comando incorrecto en
/etc/profile
por ejemplo, ejecute en los siguientes comandos de la terminal:fuente bash / etc / profile
Si algo está mal, como en este caso, el resultado será:
Entonces, ahora sabemos con certeza que hay un problema (
command not found
) en/etc/profile
archivo en la línea 32 (no está en la línea 31 como se indica arriba porque hemos insertado una nueva línea al comienzo del archivo).Muchas gracias a Luca Borrione por su guión de esta respuesta que me ayudó a completar esta solución generalizada.
fuente
.bashrc
y.profile
a la pregunta: no puedo encontrar ♦ aquí..bash_aliases
,.pam_environment
, etc) para somenthing extraña en el interior, no necesariamente exactamente este carácter./etc/profile
. Tienes algo muy extraño allí. Simplemente elimine todo entrefi
yJAVA_HOME
, después de presionar uno o dos 'Enter' y todo debería estar bien después. Modifique el archivo consudo gedit /etc/profile
/etc/profile
. Extraño bolso.Para depurar los scripts de inicialización de bash, ejecute lo siguiente (después de haber iniciado sesión en la consola virtual).
Lo anterior ejecuta bash en modo interactivo (
-i
) login (-l
), igual que ellogin
programa cuando inicia sesión en una consola virtual.-c ''
hace que salga inmediatamente después de ejecutar los scripts de inicialización, y el-x
yPS4=...
hace que la salida de cada comando, antes de que los ejecuta, junto con el nombre de archivo y número de línea de ese comando. Eso debería ayudar a determinar qué línea de qué archivo reside ese comando no válido.En una nota al margen, ♦ es el símbolo que la fuente predeterminada para la consola virtual usa para imprimir caracteres para los que no tiene un símbolo.
fuente
Mientras busca sus archivos de inicialización, puede ser útil buscar el hexadecimal utilizado para generar el ♦. El código hexadecimal para ♦ es 2666, de acuerdo con el carácter Unicode 'BLACK DIAMOND SUIT' . Nota: Hay al menos otro código hexadecimal, 25C6, que produce el mismo o similar símbolo. Ver los resultados de búsqueda para "diamante". Búsqueda de caracteres Unicode
Quizás algo así
\u2666
está en uno de los guiones. Del manual de referencia de Bash para echo - "\ uhhhh el carácter Unicode (ISO / IEC 10646) cuyo valor es el valor hexadecimal HHHH (de uno a cuatro dígitos hexadecimales)"Depende de la codificación de caracteres utilizada, por lo que es posible que desee buscar los más probables primero.
echo $LC_CTYPE
debería devolver la codificación de caracteres utilizada por su shell. Vea cómo obtener la codificación de caracteres del terminalfuente
~/.bash_history
se almacenan los comandos ejecutados interactivamente en PS1.\u2666
y ♦ en Catfish (búsqueda de Lubuntu), nada. Yo siembrohistory
, nada. Veo este mensaje solo en tty solo después de iniciar sesión. Despuésecho $LC_CTYPE
me sale la línea vacía.locale
debería mostrar LC_CTYPE. localeEscriba la ruta completa a una herramienta conocida que le permitirá editar su archivo bashrc, junto con la ruta completa a su archivo bashrc.
Encuentre cualquier abuso a su
PATH
variable y coméntelo. Probablemente cuando intentaba agregar algo a su ruta, era una comilla simple en lugar de una comilla doble.Copie su .bashrc en una herramienta como https://www.shellcheck.net/ para ver si tiene algún problema evidente con el uso de bash.
Espero que ayude.
fuente