Эта ошибка означает, что у вас есть экранированный #
(это означает \ #
) в одном из файлов инициализации bash. Поскольку его нет в ~ / .bashrc
или ~ / .bash_profile
, он должен быть в одном из других файлов, которые bash читает при загрузке. Чтобы быть уверенным, просто выполните поиск по всем из них 1 :
grep -FH '\#' ~/.bashrc ~/.profile ~/.bash_profile ~/bash.login \
~/.bash_aliases /etc/bash.bashrc /etc/profile \
/etc/profile.d/* /etc/environment 2>/dev/null
Это должно показать вам, что один из файлов, перечисленных выше, содержит \ #
. Отредактируйте файл, удалите его, и все должно работать.
Если команда не возвращает никаких выходных данных, это означает, что один из этих файлов использует другой - нестандартный - файл, а именно тот файл, в котором есть ошибка. В этом случае отредактируйте свой вопрос и добавьте вывод этой команды:
grep -P '(^|\s+)(\.|source) .' ~/.bashrc ~/.profile ~/.bash_profile ~/bash.login \
~/.bash_aliases /etc/bash.bashrc /etc/profile \
/etc/profile.d/* /etc/environment 2>/dev/null
Это должно напечатать все экземпляры источника другого файла и указать нам в правильном направлении.
В общем, #
- это не команда, это комментарий. Все, что находится после него, просто игнорируется bash
. Итак, когда вы запускаете pacman -Ss #
, вы фактически запускаете только pacman -Ss
, поэтому вы получаете так много результатов.
1 Некоторые из этих файлов здесь не важны. Например, ~ / .profile
игнорируется, если существует ~ / .bash_profile
и / etc / profile
не будет прочитан при открытии нового терминала, но вы также можете просмотреть их все на всякий случай.
lsof /tmp/.X11-unix/X*
от имени пользователя root будут перечислены команды и pid, соответствующие каждому сокету. Затем вы можете сопоставить имя сокета с номером дисплея, как вы сделали в своем примере.