The file setenv.sh, in the current directory, sets and exports several variables. You are in an interactive bash shell running with default options (not POSIX mode). Which two invocations leave those variables set in that shell after the file has run? (Choose two.)

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

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

Choose 2.

Correct source setenv.sh

Correct. source reads and executes the file in the current shell, so its assignments persist. bash's source searches PATH and, when not in POSIX mode, also the current directory.

Not correct bash setenv.sh

Wrong. This starts a new bash process to interpret the file. That child exits and its environment is discarded. It does not even need the execute bit.

Not correct ./setenv.sh

Wrong. Executing the file forks a child process that runs the script (via its shebang line, or via a fallback shell if it has none). Nothing it exports can reach the parent shell.

Correct . ./setenv.sh

Correct. `.` is the POSIX spelling of source and behaves identically here, running the file in the current shell.

Not correct exec ./setenv.sh

Wrong, and destructive. exec replaces your current shell process with the script, so when the script finishes there is no shell left to hold the variables and the terminal session ends.

Why

Only sourcing runs a file's commands in the current shell. Everything else forks (or, with exec, replaces) the process, and a process cannot write into its parent's environment. This is why shell configuration files and scripts that set up a build or virtual environment are documented as `source thefile`, never `./thefile`.

Where this comes from

Cited
LPI exam objective 105.1
What it says
Source a file to run its commands in the current shell.

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