2013-03-21 8 views
21

で設定した環境変数が私のcronジョブで取得しない:cronジョブがここにある.bashrc

[email protected]:~$ crontab -l 
* * * * * /bin/bash -l -c 'source ~/.bashrc; echo $EDITOR > /tmp/cronjob.test' 

~/.bashrcファイル内の、私はexport EDITOR=vimを持っていますが、最終/tmp/cronjob.testファイルで、それはまだ空ですか?

環境変数(.bashrcファイルに設定されている)を取得して、それを私のcronジョブで使用するにはどうすればよいですか?

[email protected]:~$ lsb_release -a 
No LSB modules are available. 
Distributor ID: Ubuntu 
Description: Ubuntu 12.04 LTS 
Release:  12.04 
Codename:  precise 
[email protected]:~$ uname -a 
Linux dragon 3.2.0-26-generic-pae #41-Ubuntu SMP Thu Jun 14 16:45:14 UTC 2012 i686 i686 i386 GNU/Linux 

使用する場合は、この:/tmp/cron.debug.res

* * * * * /bin/bash -l -c -x 'source ~/.bashrc; echo $EDITOR > /tmp/cronjob.test' 2> /tmp/cron.debug.res 

... 
++ return 0 
+ source /home/plee/.bashrc 
++ '[' -z '' ']' 
++ return 
+ echo 

ところで、.bashrcファイルがデフォルトですが、私は1つの行を追加した例外を除いては、Ubuntu 12.04に付属export EDITOR=vim

私は直接コマンドラインでこれを行うには、代わりに、cronジョブを使用しない場合:

source .bashrc; echo $EDITOR # Output: vim 
+0

一時ファイルに 'cat〜/ .bashrc'を実行するとどうなりますか? – Alex

+0

'cat〜/ .bashrc'はどういう意味ですか? 'export EDITOR = vim'という行があります。私はなぜ 'echo'コマンドが' $ EDITOR'環境変数を拾わないのかと尋ねています。 –

+0

申し訳ありませんが、cronエントリではファイルの 'source'の代わりに、' cron'を使用して 'cron'で読むことができることを確認してください。 – Alex

答えて

41

source ~/.bashrcが動作しない理由は、~/.bashrc(デフォルトはUbuntu 12.04のもの)の内容です。あなたはそれを見ると、あなたは次の行5と6に表示されます、

# If not running interactively, don't do anything 
[ -z "$PS1" ] && return 

PS1変数が対話型シェルに設定されているので、cronを経由して実行すると、それは不在だあなたはログインシェルとしてそれを実行しているにもかかわらず、 。 、source ~/.bashrc作品を作るために

+ source /home/plee/.bashrc 
++ '[' -z '' ']' 
++ return 

~/.bashrcPS1変数の存在をチェックする行をコメントアウト::これは/bin/bash -l -c -x 'source ~/.bashrc; echo $EDITOR > /tmp/cronjob.test'によって生成されたファイルの内容によって確認され

#[ -z "$PS1" ] && return 

これはbashを行います~/.bashrcの内容全体を実行するcron

+6

'.bashrc'ファイルを' source'する前に '$ PS1'を何らかの任意の値に設定してください。あなたは '.bashrc'を変更する必要はありません。 –

+0

それは私のために働いた - 私はそれがそのように設定された理由は知らないが、それは他のものを試して時間をかけてトリックを行ったようだ! – Avishai

+0

これは何らかの理由で私にとってはうまくいきません。私はまだ '〜/ .bashrc'をcronjobsに入れません。 – chovy

1

私はただ驚くべきことに取り組んでいる、唯一のラインexport EDITOR=vimでファイル.env_setup_rcファイルを試してみました。

だから、.bashrcには、cronジョブbashコマンドと競合するものがあると思います。

8

@alexが提供する回答は正しいが、Ubuntu 13.10コードは少し変更されています。 $ PS1変数はありませんが、コード6-30にはコードがあります

case $- in 
    *i*) ;;  
    *) return;; 
esac 

ただ返す行をコメントアウトするだけです。すなわち、以下のコードは動作します

case $- in 
    *i*) ;;  
# *) return;; 
esac