Por que o echo $ (crontab -l) mostra a listagem atual do diretório de trabalho e somente o conteúdo do próprio arquivo crontab?

1

Então, se cwd for o /tmp agora:

crontab -l
> #min hour day mon dow  command
> * * * * * /usr/local/bin/growlnotify -t 'helloTitle' -m 'helloMessage' -n 'myApp' -sw

mas:

echo $(crontab -l)
> #min hour day mon dow  command 0004d519be91d 0004d519d798b launch-0NKnNe launch-NdhkpV
launch-bqJRD2 launch-zac20v launchd-276.rbWQ6r 0004d519be91d 0004d519d798b launch-0NKnNe
launch-NdhkpV launch-bqJRD2 launch-zac20v launchd-276.rbWQ6r 0004d519be91d 0004d519d798
launch-0NKnNe launch-NdhkpV launch-bqJRD2 launch-zac20v launchd-276.rbWQ6r 0004d519be91d 
0004d519d798b launch-0NKnNe launch-NdhkpV launch-bqJRD2 launch-zac20v launchd-276.rbWQ6r 
0004d519be91d 0004d519d798b launch-0NKnNe launch-NdhkpV launch-bqJRD2 launch-zac20v 
launchd-276.rbWQ6r /usr/local/bin/growlnotify -t 'helloTitle' -m 'helloMessage' -n 'myApp' -sw

linha primeiro linha + / tmp conteúdo + linha última do crontab

Por que tal comportamento? Eu preciso do $(crontab -l) para if [[ $(crontab -l | grep "^...$") =~ "^...$"]]

    
por static 20.05.2013 / 15:34

2 respostas

1

Você obtém a lista de arquivos porque "crontab -l" retorna caracteres estelares (*) que são interpretados como caracteres glob.

Eu sugiro que você use 'set -f' no seu shell script em torno do seu teste para ativar a interpretação glob:

set -f
if $(crontab -l | grep -q "^...$"); then
  # your stuff
fi
set +f
    
por 20.05.2013 / 15:43
0

Melhorando a resposta anterior, não há nenhum valor em executar os comandos em um subshell.

if crontab -l | grep -q '^...$'; then
    your stuff
fi

Só para enfatizar, isso evita a necessidade de set -f , já que apenas o código de saída de grep está sendo examinado.

    
por 06.11.2014 / 12:22