Por que o ls ainda mostra o arquivo excluído via GLOBIGNORE?

1

Arquivo ausente com echo , mas com ls -a . Por quê?

bojan@hyperion:~$ touch .ignoramus
bojan@localhost:~$ ls -al | grep ignor
-rw-rw-r--  1 bojan bojan     0 Apr 19 19:05 .ignoramus
bojan@localhost:~$ GLOBIGNORE=".ignoramus";
bojan@localhost:~$ echo .i*
.icons
bojan@localhost:~$ ls -al | grep ignor
-rw-rw-r--  1 bojan bojan     0 Apr 19 19:05 .ignoramus
bojan@localhost:~$ echo $GLOBIGNORE
.ignoramus

O homem de ls diz que -a mostra apenas escondido, não menciona GLOBIGNORE.

   -a, --all
          do not ignore entries starting with .

ls (GNU coreutils) 8.23
GNU bash, version 4.3.42(1)-release (x86_64-pc-linux-gnu)
    
por Bojan Landekić 20.04.2016 / 01:09

2 respostas

2

A configuração GLOBIGNORE não tem influência sobre ls , e o manual ls não menciona GLOBIGNORE , porque ls não se importa com GLOBIGNORE . É apenas uma característica do bash, o que faz com que ele omita alguns arquivos em padrões glob.

Com echo .i* , o bash está listando os arquivos, então GLOBIGNORE entra em ação. Com ls -a , ls está listando os arquivos, então GLOBIGNORE é irrelevante.

O GNU ls tem um recurso semelhante: você pode passar um padrão para ignorar como uma opção de linha de comando.

ls -a -I .ignoramus
    
por 20.04.2016 / 02:12
0

A variável GLOBIGNORE é um recurso do bash para afetar apenas arquivos expandidos .

Em outras palavras: somente quando um glob é usado, um GLOBIGNORE tem um efeito.

Um glob é um nome alternativo para "expansão de nome de caminho" com caracteres *,?, [...].

Um comando como ls -al ou simples ls não é o resultado de um glob, portanto um GLOBIGNORE não é usado.

No entanto, um comando como ls -d * faz uso de glob e GLOBIGNORE está em vigor.

Existem duas outras maneiras pelas quais definir (ou desfazer) GLOBIGNORE afetará "expansões de nome de caminho":

GLOBIGNORE está definido e não é nulo:

  1. Os nomes dos arquivos . e .. são sempre ignorados.
  2. A opção de shell dotglob é definida (os arquivos que começam com o ponto corresponderão).

Desativando o GLOBIGNORE

  1. Nomes de arquivos .'' and .. '' NÃO são ignorados.
  2. A opção dotglob fica desativada.
por 20.04.2016 / 07:21

Tags