Приглашение терминала перезаписывает текущую строку

Чтобы перечислить только скрытых файлов :

ls -ap | grep -v / | egrep "^\."  

Обратите внимание, что файлы здесь все, что не является каталогом . Это не файл в «все в Linux - это файл» ;)

Чтобы перечислить только скрытые каталоги :

ls -ap | egrep "^\..*/$"  

Комментарии:

  • ls -ap lists все в текущем каталоге, включая скрытые , и помещает / в конец каталогов.
  • grep -v / инвертирует результаты grep / , так что каталог не включается.
  • «^ \ .. * / $» соответствует всему, что начинается с . и оканчиваются на / .
  • Если вы хотите исключить . и .. из результатов второй части, вы можете использовать параметр -A вместо -a для ls , или если вам нравится работать с регулярным выражением, вы можете использовать "^ \. [^.] + / $" вместо "^ \ .. * / $" .

Удачи!

7
13.04.2017, 15:36
2 ответа

Вы полностью развенчали представление оболочки Bourne Again о том, что было напечатано и что нужно стереть / перезаписать, поскольку она отображает историю команд и позволяет редактировать командную строку.

Разбивка приглашения на разделы:

  1. \ [\ e] 0; \ u @ \ h: \ w \ a \] - непечатаемые символы, правильно заключенные
  2. $ {debian_chroot: + ($ debian_chroot)} - печатаются только символы, предположительно
  3. \ [\ 033 [01; 36m \] - непечатаемые символы, правильно заключенные
  4. \ u @ \ h - печатаются только символы
  5. \ [\ 033 [00m \] - непечатаемые символы, правильно заключены
  6. \ 033 [01; 34m \] - непечатаемые символы, неправильно заключены, поэтому Оболочка Bourne Again не знает, что это
  7. \ w \ 033 [00m \] - ошибочная смесь печатных и непечатаемых символов
  8. [$ (введите __git_ps1> / dev / null 2> & 1 && __git_ps1 "(% s)")] - печать только символов, предположительно

Я давал этот совет раньше , но это общий совет, что применимо и здесь:

  • Используйте последовательно либо \ e , либо \ 033 , для вашего собственного здравомыслия.
  • Сделайте ваши \ [ и \] строго совпадающими невложенными парами.
  • Убедитесь, что все непечатаемые последовательности находятся в пределах \ [ и \] (и что, наоборот, все последовательности печати - нет).

(Вот почему я лично предпочитаю Z Shell и ее альтернативный механизм расширения подсказок, когда мне нужны дурацкие цветные подсказки.Он знает , что такие вещи, как % F {зеленый} , не печатают последовательности, без необходимости сообщать; и он также вырабатывает правильные escape-последовательности из terminfo без их аппаратного подключения.)

14
20.08.2021, 11:56

Хотя ответ JdeBP превосходен, я решил добавить тот, который сработал для меня, так как моя PS1 уже была подходящей. Первоначально я разместил это в связанном выпуске(#2713)в репозитории WSL на GitHub :

.

Я хотел бы добавить не здесь для потомков, потому что эта проблема сводила меня с ума. Я думаю, что наконец-то нашел причину, по крайней мере, для себя, так что, надеюсь, это поможет другим. Я видел эту проблему в различных системах (сборок 18362 -18975 )с различными дистрибутивами. Я на 100% убедился, что синтаксис моей PS1 в моем.bashrc был правильным, и все непечатаемые символы -были правильно экранированы и т. д.

У меня возникла проблема со свойствами консоли. Я установил дистрибутивы WSL (Ubuntu, Debian и Kali )через Microsoft Store и запускал приложения из меню «Пуск». Насколько я понимаю, это запускает WSL в классической консоли командной строки Windows под брендом Linux. (Кстати, запуск из папки с помощью Shift+Right -клик / «Открыть оболочку linux здесь» открывает то же окно консоли ).

В любом случае, суть в том, что когда вы -щелкаете правой кнопкой мыши по получившейся строке заголовка консоли, нажимаете «Свойства», затем выбираете параметр «Переносить вывод текста при изменении размера», это то, что решило проблему для меня.

Console Properties

Wrap Text

Теперь я могу правильно вводить команды, которые переходят на следующую строку, и могу соответствующим образом перемещать курсор. Это определенно где-то ошибка, но я не знаю, где ошибка.

0
20.08.2021, 11:56

Теги

Похожие вопросы