2013-12-15 4 views
3

Как настроить среду crontab таким образом, чтобы она имела доступ к встроенным переменным BASH, таким как $ HOME, $ PWD, $ OLDPWD, $ USER, $ PATH, $ PS1 и т. Д., Так что скрипты, которые полагаются на эти переменные, могут работать в среде crontab? Это вопрос поиска некоторых файлов, о которых я не знаю, или вопросы немного сложнее?Crontab: доступ к внутренним переменным BASH

ответ

2

Эти переменные всегда заданы так, как ожидалось: HOME, PWD, USER.

При планировании вашего сценария, как это:

0 0 * * * /path/to/script.sh 

и первая строка сценария #!/bin/bashто, вероятно, он будет источником ~/.bashrc но не ~/.bash_profile или ~/.profile при запуске. Помимо этого, переменные, о которых вы говорите, должны работать должным образом. Например, если вы измените каталоги в своем скрипте, то будут обновлены OLDPWD и PWD. Я не вижу, как PS1 будет иметь значение в скрипте.

С другой стороны, если в вашем crontab вы хотите запланировать одну команду, и вы хотите .bashrc быть получены, то вы должны написать так:

0 0 * * * . .bashrc; somecmd 
# or: 
0 0 * * * bash -c somecmd 

Также имейте в виду, что, хотя вам может устанавливать переменные в crontab, он отличается от переменных в сценарии оболочки. Например эти работы:

SHELL = /bin/bash 
SHELL=/bin/bash 
PATH=~/bin:/usr/bin/:/bin 

Это с другой стороны, не будет делать то, что вы ожидаете:

PATH=$HOME/bin:$PATH 

Как объяснены в man 5 crontab значение (что-нибудь после =) не разбирается, поэтому $HOME и $PATH в этом примере будут взяты буквально.

Смежные вопросы