
Ubuntu 16.04 Bash 4.3.46(1) の最後で、/etc/bash.bashrc
次の変数を宣言しました。
drt="/var/www/html"
ファイルが見つかりました(source /etc/bash.bashrc
)
crontab -e
テストのために実行して追加しました* * * * * touch /var/www/html/myFile.sh
。これはうまくいきますが、* * * * * touch ${drt}/myFile.sh
うまくいきません。
で宣言した変数はbash.bashrc
グローバル変数ですが、なぜ処理されないのですかcrontab
?
アップデート1
原則として、重複を避けるためにストリームを(または)drt="/var/www/html"
にコピーしたくありません。crontab
cron.d
アップデート2
フォローする今回の会議正解で示された答えが私の問題を解決していないようです。
これ2番目の答え少し不明です。なぜこの条件文を(一部?)bashrc
ファイルに入れるのですか?
bash.bashrc
SHELL=/bin/bash
また、(最初に追加された)に関連する3番目のソリューションを試してcrontab
ファイルを保存してソースをインポートしましたが、bash.bashrc
テストでは何も変更されませんでした* * * * * touch ~/myfiile
。
したがって、私はその質問を見直すか、少なくともそれに対する答えが明確になるように頼みます。
答え1
で定義された変数は、*.bashrc
シェルで実行されているプログラムから読み取ることができ、シェルでのみ排他的に処理されるという点でグローバル変数です。プログラムがこれらの環境変数を読み取るかどうか、およびそれを解釈する方法は完全に設計に依存し、プログラムが環境変数を処理する方法の要件はありません。
つまり、cron
crontabの解釈方法はcron
プログラム自体によって決まります。 「グローバル」環境変数を読み取るのではなく、独自の構文を使用して「環境変数」を定義することにします。これは意図的に設計されています。${drt}
で使用できない理由を理解できる場合は、crontabが期待どおりに機能しないCMakeLists.txt
理由も理解できるはずです。${drt}
もちろん、次の行を追加できます。予約されたことあなたがしたい場合。
drt="/var/www/html"