2013-12-15 60 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。除此之外,你提到的變量應該按預期工作。例如,如果您在腳本中更改目錄,則將更新OLDPWDPWD。我不明白PS1在腳本中是如何相關的。

在另一方面,如果你crontab要安排一個命令,你想.bashrc進行採購,那麼你必須這樣寫:

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

也請記住,雖然你可以在crontab中設置變量,它與shell腳本中的變量不同。例如,這些工作:

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

這在另一方面也不會做你所期望的:

PATH=$HOME/bin:$PATH 

man 5 crontab解釋,值(=之後的任何東西)都不會被解析,所以$HOME這個例子中的$PATH將從字面上理解。