1

Так что, если сейчас cwd является /tmp :

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

но:

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

поэтому первая строка + /tmp content + последняя строка crontab

Почему такое поведение? Мне нужен $(crontab -l) для if [[ $(crontab -l | grep "^...$") =~ "^...$"]]

2 ответа2

1

Вы получаете список файлов, потому что «crontab -l» возвращает символы звездочки (*), которые затем интерпретируются как символы глобуса.

Я предлагаю вам использовать 'set -f' в вашем сценарии оболочки вокруг теста, чтобы повернуть глобальную интерпретацию:

set -f
if $(crontab -l | grep -q "^...$"); then
  # your stuff
fi
set +f
0

По сравнению с предыдущим ответом, нет смысла запускать команды в подоболочке.

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

Просто чтобы подчеркнуть, это позволяет избежать необходимости set -f так как проверяется только выходной код из grep .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .