Então, quando eu executo isso no Fedora, estou vendo:
$ ls hmm_data/indivA12_AATAAG/refs/par1/
2R-orths.alleles 2R-ref.alleles
$ ls hmm_data/indivA12_AATAAG/refs/par1/ | grep -F '-ref.alleles'
2R-ref.alleles
Mas quando executo no Ubuntu (mesmos dados), não recebo nenhum resultado do grep:
$ ls hmm_data/indivA12_AATAAG/refs/par1/
2R-orths.alleles 2R-ref.alleles
$ ls hmm_data/indivA12_AATAAG/refs/par1/ | grep -F '-ref.alleles'
Alguma idéia do que poderia estar acontecendo? Como posso criar algo que funcione da mesma forma nos dois sistemas?
ls *-ref.alleles
?Respostas:
é equivalente a:
(nenhum dos caracteres entre os apóstrofes é metacaracteres de shell, portanto, citá-los não tem efeito.)
Por sua vez, é equivalente a:
pela análise normal de
-
opções prefixadas. A-e
opção leva um argumento, mas-F
e-r
não.Como você não especificou nenhum arquivo para grep, o comportamento padrão é agir no stdin ... exceto que a
-r
opção não faz sentido, por isso, o padrão é pesquisar.
(o diretório atual) recursivamente e ignora o stdin. Em algumas versões.Você precisa usar o indicador
--
"no more options" antes de uma regexp que comece com-
como emEu rastreei o ponto em que o comportamento de
-r
sem argumentos de arquivo mudou. Estava na versão 2.11, lançada em 2 de março de 2012. Veja o comunicado de lançamento.O commit do git que afetou o comportamento é esse e esse .
Se você rodar
grep --version
em suas duas máquinas, tenho certeza que descobrirá que uma delas está do lado errado da 2.11fonte
A liderança
-
é o problema. Para obter os mesmos resultados, adicione--
:De
man bash
:fonte
--
linha de comando do bash, que é independente do entendimento do grep--
. Eles funcionam da mesma maneira porque é uma convenção comum, mas, em geral, a página de manual do seu shell não diz nada sobre o significado dos argumentos para outros programas.Verifique .bashrc se houver algum apelido no seu comando grep que substitua seu comportamento. Talvez seja o problema. Tente também grep sem o parâmetro "-F".
fonte