$ BASH_ENVの可用性を保証する方法


8

非インタラクティブ、非ログインシェルは、$ BASH_ENVで指定されたスクリプトを入手しようとします。しかし、cronジョブまたはスクリプトが特定のセッションに対して$ BASH_ENVを設定する前に$ BASH_ENVが設定されることをどのように保証しますか?ハードコードしてBashをコンパイルする唯一のオプションはありますか?


チェックしてくださいpam_env。または$HOME/.env、すべてのスクリプトでソースを提供します。
ミケル2014年

回答:


7

crontab内のすべてのbashスクリプトをロードする場合はBASH_ENV、それをcrontabレベルで設定します。

BASH_ENV=/path/to/startup.bash
12 34 * * * /path/to/bash_script
1 23 1 * * /path/to/other_bash_script

BASH_ENV特定のエントリのみに設定する場合は、そこに設定します。するとBASH_ENV、crontab自体にリストされているコードには設定されませんが、とにかく複雑なものをそこに置くことは悪い考えです。

12 34 * * * export BASH_ENV=/path/to/startup.bash; /path/to/bash_script
1 23 1 * * /path/to/other_bash_script

特定のスクリプトで常に構成ファイルをロードする場合は、スクリプト内から直接ロードします。

#!/bin/bash
. /path/to/configuration.bash

なぜあなたは気にしないexportINGの$BASH_ENVあなたは、単一のプロセスのためにそれを設定している場合は?ただ、BASH_ENV=/path/to/startup.bash /path/to/bash_scriptそれを行うには賢明な方法です。
mikeserv 2014年

4

BASH_ENVは、非対話型シェルでのみ読み取られ、そのシェルがbashである場合にのみ(そして、名前の下でも呼び出されませんsh)。非ログインの対話型シェルは以下を検索しません$BASH_ENV

$ export BASH_ENV=/home/cuonglm/bash-env.sh
$ bash -lci '. test.sh'
QWERTY
$ bash -lc '. test.sh'
BASH_ENV read
QWERTY
$ bash -ci '. test.sh'
QWERTY
$ bash -c '. test.sh'
BASH_ENV read
QWERTY

ユーザーの非対話型シェルで実行される標準ファイルはありません。あなたはそれを別々のファイルに設定してからそれを調達するべきです:

bash -c '. ~/.profile; echo 123'

それとも、のようないくつかのシステム全体の設定ファイルで設定することができます/etc/environment/etc/bashrc.bashrc


私は/ etc / environmentが機能することを望んでいましたが、私が知る限り、Mac OS 10.6のどのシェルからも供給されていません。/etc/bashrc.bashrcは興味深く聞こえますが、その情報を追跡するのが困難です。それともタイプミスですか?
イゴリオ2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.