Scripts run from cron must pick up a shared file of helper definitions. The definitions are in ~/.bashrc, but the scripts never see them because bash is started non-interactively. Which environment variable, when it names a file, causes a non-interactive bash to read that file at startup?

LPIC-1 Exam 102-500, objective 105. Shells and shell scripting hard

Machine-checked — no person has signed for it. This question was read against the source cited below by an automated pass, which found no contradiction. That is a weaker claim than it sounds: the same kind of process wrote the question, so it can confirm its own mistake.

Treat it as a good draft rather than as settled fact, and read the source below before you rely on it. It is not used in mock exams here — only questions a person has signed for are.

How these questions are written — where each question comes from, what the verification ledger records, and what happens when one is found wrong.

The options

Correct BASH_ENV

Correct. When bash is started non-interactively it expands BASH_ENV and, if the result names a file, reads and executes it before running the script.

Not correct ENV

Wrong here, though it is the real POSIX counterpart. Bash consults ENV only when it is invoked as sh or is running in POSIX mode, not for an ordinary non-interactive bash.

Not correct BASH_SOURCE

Wrong. BASH_SOURCE is an array bash maintains itself, holding the source file names of the current call stack. Assigning to it does not cause anything to be read.

Not correct SHELLOPTS

Wrong. SHELLOPTS is a colon-separated list of the enabled set options. It changes shell behaviour flags, not which files are sourced.

Why

A non-interactive bash reads none of the usual startup files: not /etc/profile, not ~/.profile, not ~/.bashrc. Its one hook is BASH_ENV, whose value is expanded and then read as a file, and note that PATH is not used to find it, so give an absolute path. In practice the more robust answer for cron is to have the script source its helper file explicitly, since BASH_ENV must itself be set in cron's environment to have any effect.

Where this comes from

Cited
manual page bash(1)

Practise this

Reading one question is not practice. The trainer will draw a short set from objective 105 and space the ones you get wrong.

Practise LPIC-1 Exam 102-500

More questions on this objective

All questions on Shells and shell scripting

Practise LPIC-1 Exam 102-500