Powershell tab completion: Como ele decide qual arquivo sugerir?

0

Eu tenho dois arquivos functions.txt e functions.ps1.

No prompt de comando do PS, quando eu pressiono a tab no diretório, a primeira escolha que aparece é "functions.txt".

No entanto, se eu digitar "del" e, em seguida, pressionar tab, a primeira escolha será "functions.ps1".

Isso parece ser consistente.

Existe alguma lógica por trás disso, é coincidência, ou é mal diabos tentando me enganar e deletar o arquivo errado?

    
por Andrew J. Brehm 10.02.2012 / 10:58

2 respostas

0

Se você executar:

gci | sort

Em um diretório, você verá que ele classifica os caracteres, (., $,!, etc) A-Z & a-z, o melhor que posso dizer,

Shell> .\ **TAB**

nesse diretório é apenas gci | ordenar nessa ordem (ignorando os caracteres até o final).

Eu também presumo que classifique o nome do arquivo primeiro e depois a extensão. Portanto, para o seu exemplo, o functions.ps1 vem antes do functions.txt. Eu vejo o mesmo comportamento com del TAB , ou apenas. \ TAB

Isso parece consistente com o seguinte diretório de exemplo de arquivos:

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         2/10/2012   2:51 PM          0 foo1
-a---         2/10/2012   2:52 PM          0 foo1.ps1
-a---         2/10/2012   2:52 PM          0 foo1.txt
-a---         2/10/2012   2:51 PM          0 foo2
-a---         2/10/2012   2:51 PM          0 foo2.ps1
-a---         2/10/2012   2:52 PM          0 foo2.txt
    
por 10.02.2012 / 21:56
0

A resposta parece ser que a conclusão da guia realmente usa dois algoritmos diferentes para decidir qual arquivo vem primeiro, dependendo da situação.

Neste exemplo, o arquivo "ab" é criado antes que o arquivo "aa" e a conclusão da tabulação em "a" (terceira linha) exiba "ab" (o arquivo criado primeiro).

PS P:\> echo hello > ab

PS P:\> echo hello > aa

PS P:\> .\ab

Mas a conclusão da guia em "a" depois de "del" faz isso:

PS P:\> del .\aa

No entanto, criar os arquivos ao contrário fornece esse resultado:

PS P:\> echo hello > aa

PS P:\> echo hello > ab

PS P:\> .\aa

E a conclusão da guia "a" depois de "del" também mostra "aa":

PS P:\> del .\aa
    
por 23.02.2012 / 09:43

Tags