почему «ls * bash *» не отображает файл .bashrc

Я подключился к домашнему каталогу и набрал

ls *bash* 

ожидая, что он покажет список файлов, содержащий «bash». Однако это не так.

Хотя, набрав

 ls .bash* 

работает.

Согласно документации, * обозначает любого персонажа, не так ли? Но, похоже, это не представляет . в этом случае. Что не так?

3 Solutions collect form web for “почему «ls * bash *» не отображает файл .bashrc”

dotglob оболочки dotglob управляет этим:

 $ shopt -s dotglob $ ls *bash* .bash_history .bash_logout .bashrc 

Он не включен по умолчанию, вероятно, как показатель удобства использования / безопасности, поскольку большинству конечных пользователей не нужно беспокоиться о dotfiles и может очень легко удалить важные файлы домашнего каталога (такие как .config , .ssh ) случайно.

В большинстве оболочек символ «*» не будет соответствовать начальному «.». характер по историческим причинам (например, файлы, начинающиеся с «.» считаются скрытыми, а «.» и «..» относятся к каталогам)

Следовательно, ls не отображает .bashrc, но ls -a покажет все файлы. Аналогично, ls * будет распространяться на все файлы, кроме тех, которые начинаются с символа «.». персонаж.

Измените это поведение на shopt -s dotglob который сообщает bash, что «*» также должен совпадать с начальным «.». персонаж. После этого ls * покажет .bashrc.

Причина в том, что ведущая точка – это соглашение для «скрытого файла» и файлового глобирования (которое является именем для использования * как «любое число любых символов» и «как любой персонаж» и несколько других) в частности исключает ведущую точку, потому что это означает «скрытый файл».

Если вы напишете ls -l .* Вы будете соответствовать .bashrc , но вы также будете соответствовать специальным скрытым файлам . и .. которые являются каталогами, поэтому для отображения скрытых файлов вам нужно что-то в этом направлении:

  • ls -ld .*
  • ls -l .[^.]*
  • ls -A | grep bash

ls -A *bash* не покажет вам .bashrc потому что файл globbing выполняется до того, как опция -A вступит в силу.

Если вы хотите изменить способ работы файлов с скрытыми файлами, вы можете выполнить shopt -s dotglob , либо просто в оболочке для тестирования, либо добавить свой .bash_profile или .bashrc, чтобы он всегда был эффективным.

  • Команда ls: как игнорировать регистр без globbing
  • Используйте расширенное переключение для списка файлов, но не каталогов в bash
  • «Grep -r foo *» против «grep -r foo».
  • Как исключить некоторые файлы, не соответствующие определенным расширениям с помощью grep?
  • Глобус с численным порядком
  • Rsync не может удалить удаленный файл не существует в локальном
  • Как перечислить файлы, начинающиеся с «a» или «c» из / etc.
  • Почему команда «ls» * «" ничего не показывает?
  • ls *. * дает: "*. *: Нет такого файла или каталога" сообщение
  • Когда и зачем мне нужно указывать звездочки
  • Как поместить определенные файлы из каталога в массив в bash?
  • Interesting Posts

    Тайм-аут оболочки Korn

    поместите вкладку перед каждой выходной строкой на AIX / ksh

    Использование «зарезервированных» кодов для статуса выхода сценариев оболочки

    Cron vs systemd таймеры

    настроить принтер lpd для печати на принтер и файл

    хотите скопировать несколько файлов * .txt из нескольких каталогов в один и тот же каталог, но переименуйте новый файл

    getent shadow показывает хэши паролей для некоторых пользователей

    что является разделителем по умолчанию для опции sort -k

    tail -f, но сначала сосать содержимое файла (aka `cat -f`)

    apt-get: нет кандидата на установку libxul-dev

    список выбираемых единиц для журнала

    Количество экранов X, соответствующих количеству разделов «Экран» в файле xorg.conf для конфигурации с несколькими мониторами

    Как подавлять сообщения debug2 во время сеанса SSH?

    Доступна новая версия файла конфигурации / etc / default / grub, но версия, установленная в настоящее время, была локально изменена

    как создать более трех настраиваемых команд geany с ярлыками

    Linux и Unix - лучшая ОС в мире.