У меня эта проблема после обновления Lubuntu с 12.10 до 13.04.
Жму Ctrl+ Alt+ 1, введите логин, пароль, подождите две секунды и получаем: ♦: command not found"
. После этого сообщения я могу без проблем набирать команды, но что это?
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
Мой .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
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
Мой .profile
файл:
# ~/.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
Файл /etc/profile
находится здесь: http://paste.ubuntu.com/5781361/
command-line
login
lubuntu
tty
Виталий Зданевич
источник
источник
echo $PATH
? (Пожалуйста, измените его в свой вопрос, а затем ответьте).echo $PATH
к моему вопросу.Ответы:
Временное решение
Во-первых, я думаю, что вы имеете в виду, когда вы идете в tty1 - Ctrl+ Alt+F1 .
Теперь я думаю, что происходит то, что вы сказали, скорее всего, потому что у вас есть странный персонаж, такой как ♦ ( персонаж с бриллиантовым костюмом или специальный значок для модератора Askubuntu ) в
~/.bashrc
или~/.profile
файл или другой файл , который содержит различные команды инициализации.Как вы можете видеть на следующем изображении, я отредактировал
~/.bashrc
файл, поместив внутри символа ♦ в одну строку. В результате, когда я открываю терминал, возникает описанная вами проблема:Это происходит то же самое , когда я иду в tty1 с Ctrl+ Alt+F1 .
Файлы , которые содержат команду инициализации , когда оболочка вызываются:
/etc/profile
,/etc/bashrc
,~/.bash_login
,~/.profile
,~/.bashrc
,~/.bash_aliases
и , возможно , другие. См. Файлы инициализации оболочки .Чтобы быстро проверить, что внутри одного из этих файлов что-то не так, вы можете использовать
source
команду. Например:Окончательное решение
После проверки
/etc/profile
с http://paste.ubuntu.com/5781361/ я обнаружил, что в строке 31 есть «Переопределение справа налево» -‮
символ Юникода. Просто откройте/etc/profile
файл с помощьюsudo -H gedit /etc/profile
, убедитесь, что удалили этот странный символ, и проблема исчезнет.В качестве забавы, например, в HTML, если вы вставляете этот символ Юникода, используя десятичный код (
‮
) перед строкой, посмотрите, что происходит:Еще одно более обобщенное решение
Мы найдем точную команду, вызывающую ошибку, используя " ловушку" ».
Во-первых, мы должны создать новый файл скрипта в
~/bin
каталоге, давайте вызовем егоlib.trap.sh
(gedit ~/bin/lib.trap.sh
), со следующим внутри:Теперь единственное, что вам нужно сделать, это поместить следующую строку в начало файла
/etc/profile
(sudo -H gedit /etc/profile
):+ Изменить
<user_name>
с вашим именем пользователя. Таким образом, все файлы, которые содержат команды инициализации при вызове оболочки, будут проходить через «ловушку».Чтобы проверить, есть ли неправильная команда в
/etc/profile
Например, , выполните в терминале следующие команды:исходник bash / etc / profile
Если что-то не так, как в этом случае, результат будет:
Итак, теперь мы точно знаем, что есть проблема (
command not found
) в/etc/profile
файле в строке 32 (это не в строке 31, как указано выше, потому что мы вставили новую строку в начало файла).Большое спасибо Люке Боррионе за его сценарий из этого ответа, который помог мне завершить это обобщенное решение.
источник
.bashrc
и.profile
к вопросу - я не могу найти ♦ здесь..bash_aliases
,.pam_environment
, и т.д.) для somenthing странных внутри, не обязательно именно такого характера./etc/profile
. У тебя там что-то очень странное. Просто удалите everithing междуfi
иJAVA_HOME
, после того, как нажмите один или два «Enter» и все должно быть в порядке после. Изменить файл с помощьюsudo gedit /etc/profile
/etc/profile
. Странная сумка.Для отладки сценариев инициализации bash выполните следующее (после входа в систему на виртуальной консоли).
Вышеописанное запускает bash в режиме interactive (
-i
) login (-l
), так же как иlogin
программа, когда вы входите в виртуальную консоль.-c ''
заставляет его завершать работу сразу после выполнения сценариев инициализации, а также-x
иPS4=...
выводит каждую команду перед ее выполнением вместе с именем файла и номером строки этой команды. Это должно помочь определить, в какой строке какого файла находится эта недопустимая команда.Кстати, ♦ - это символ, используемый по умолчанию шрифтом для виртуальной консоли для печати символов, для которых у него нет символа.
источник
При поиске файлов инициализации может быть полезно найти шестнадцатеричное число, используемое для вывода ♦. Шестнадцатеричный код для ♦ - 2666, в соответствии с Unicode Character 'BLACK DIAMOND SUIT' . Примечание. Существует по крайней мере еще один шестнадцатеричный код 25C6, который выдает такой же или похожий символ. Смотрите результаты поиска по запросу "diamond". Поиск символов Юникода
Возможно, что-то подобное
\u2666
есть в одном из скриптов. Из Bash Справочное руководство по эхо - "\ uhhhh символ Unicode (ISO / IEC 10646), значение которого является шестнадцатеричным значением HHHH (от одной до четырех шестнадцатеричных цифр)"Это зависит от используемой кодировки символов, поэтому вы можете сначала найти наиболее вероятные из них.
echo $LC_CTYPE
должен вернуть кодировку символов, используемую вашей оболочкой. См. Как получить кодировку символов терминалаисточник
~/.bash_history
хранятся команды, запущенные интерактивно на PS1.\u2666
и ♦ в Catfish (поиск Lubuntu) - ничего. Я сеюhistory
- ничего. Я вижу это сообщение только в tty только после входа в систему. Послеecho $LC_CTYPE
я получаю пустую строку.locale
должен показать LC_CTYPE. локальЗапишите полный путь к известному инструменту, который позволит вам редактировать файл bashrc, а также полный путь к файлу bashrc.
Найдите любое злоупотребление вашей
PATH
переменной и закомментируйте его. Вероятно, при попытке добавить что-то к вашему пути, это было одинарные, а не двойные.Скопируйте ваш .bashrc в такой инструмент, как https://www.shellcheck.net/, чтобы увидеть, есть ли у вас какие-либо явные проблемы с использованием bash.
Надеюсь, это поможет.
источник