'teste de eco?' imprime 'test2' mas 'ls test?' não imprime nada

3

Eu estava jogando bash globbing recentemente e notei o seguinte:

Primeiro, faça 2 dirs:

$ mkdir test
$ mkdir test2

Então:

$ echo test?

Saídas (corretamente):

test2

Mas:

$ ls test?

Não produz nada ...

Mas, se você criar mais um diretório (test3), echo e ls funcionarão como supostos.

Alguém tem alguma ideia de por que isso acontece?

    
por theogfx 30.06.2014 / 16:49

1 resposta

1

Vamos tentar entender de básico.

mkdir test
touch file
mkdir test1
mkdir test2

O ? procura por um e apenas um caractere.

Agora, quando emitimos o comando ls tes? , a saída seria, file .

Funcionou porque criamos um arquivo dentro do diretório. De man page de ls ,

NAME
       ls - list directory contents

O diretório test tem o file dentro e, portanto, o comando ls lista os arquivos que estão presentes no diretório.

Agora, vamos criar um arquivo como abaixo.

touch ramesh
ls rames?
ramesh

A razão pela qual o comando acima funcionou é porque ramesh é um arquivo e está presente no diretório atual (Como no ls working, ele lista o conteúdo do diretório e no diretório atual existe um arquivo chamado ramesh ).

Agora, vamos criar um diretório chamado ram1 , conforme abaixo.

mkdir ram1
ls ram?

O acima não produz nada. É porque o diretório ram1 atualmente não possui arquivos dentro dele. Agora, se criarmos outro diretório chamado ram2 e tentar, ele funcionará porque primeiro verifica se o diretório ram1 tem algum arquivo e, em seguida, verifica se o diretório ram2 possui algum arquivo. Lembre-se de que ls funciona na classificação.

Se você quiser ver mais sobre o funcionamento interno, emita o comando stat .

Nesse caso, stat ram? produziria a saída como

  File: 'ram1'
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: 805h/2053d      Inode: 6743976     Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2014-06-30 18:17:06.000000000 -0500
Modify: 2014-06-30 18:17:03.000000000 -0500
Change: 2014-06-30 18:17:03.000000000 -0500
    
por 01.07.2014 / 01:19

Tags