Por que existe um comportamento diferente para parâmetros citados quando no crontab?

1

Cenário de caso:

$ echo "1,2,4" | grep -v [0-9]
[No results, as expected]

Mas, ao fazer isso via cron :

$ crontab -l
[...]
* * * * * echo "1,2,4" | grep -v [0-9] > /tmp/debug.dump
[...]
$ cat debug.dump
1,2,4

A solução (ou talvez a solução alternativa, não sei):

$ crontab -l
[...]
* * * * * echo "1,2,4" | grep -v "[0-9]" > /tmp/debug.dump
[...]
$ cat debug.dump
[No results, as expected]

Eu gostaria de entender o problema em vez de apenas resolvê-lo e esquecê-lo.

Por que a citação dupla resolve isso?

Nota: Este é o FreeBSD v10.3.

    
por Sopalajo de Arrierez 22.05.2018 / 20:06

1 resposta

4

Há um arquivo chamado 0, 3, 5, 6, 7, 8 ou 9 no diretório inicial do usuário que está executando esta tarefa cron. O shell expande o parâmetro [0-9] não indicado como sendo esse nome de arquivo (digamos que é 0 ); já que não há 0 na entrada, o grep -v "é bem-sucedido" e não imprime nada.

Quando você estava testando, você estava em um diretório diferente (um que não tinha um nome de arquivo de dígito único). Duplo (ou único) citando o parâmetro impede que o shell expanda esse glob, permitindo que grep o veja como um intervalo.

    
por 22.05.2018 / 20:52

Tags