Shell globbing sem arquivos correspondentes

2

Eu freqüentemente uso o globbing de nomes de arquivos do shell para fazer coisas como operar em /dev/sda , /dev/sdb , /dev/sdc , etc fazendo /dev/sd[a-f] , no entanto, isso depende de haver arquivos no disco que coincidir com esse padrão. Hoje eu queria executar gitk em cada master@{1} , master@{2} , etc, mas gitk master@{[1-5]} não funciona, pois não há nomes de arquivo correspondentes a esse padrão no disco.

Como você pode fazer com que o shell execute globbing sem considerar os arquivos de disco reais?

    
por psusi 24.03.2015 / 03:04

2 respostas

2

Você não pode fazer o shell globbing sem arquivos correspondentes. Você precisa da expansão de chaves :

gitk master@{{1..5}}

ou:

gitk master@{{1,2,3,4,5}}

Com o formulário {x..y} , você precisa de zsh 2.6-beta4 e mais tarde, bash 3.0 e mais tarde, ksh93r e posterior.

{x,y} foi original em csh e copiado para Bourne como shell primeiro em ksh .

    
por 24.03.2015 / 09:34
1

Em pelo menos bash você pode usar intervalos, por exemplo

$ echo gitk master@{{1..5}}
gitk master@{1} master@{2} master@{3} master@{4} master@{5}

Obviamente, o eco é usado acima apenas para mostrar o que acontece.

Funciona também para cartas:

$ echo /dev/sd{x..z}
/dev/sdx /dev/sdy /dev/sdz

Observação: a correspondência é glob e há correspondência de regex. Essas são duas coisas distintas. O shell faz correspondência de glob. Então, Shell regex globbing não é uma coisa.

    
por 24.03.2015 / 08:53