An executable script contains only the line `export EDITOR=vim`. After running it as `./setenv.sh`, `echo $EDITOR` in the calling shell prints nothing. What explains this?
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
Not correct The script is missing execute permission, so the assignment never ran.
Wrong. Without execute permission the shell would refuse to run it and print a permission-denied error, not run it silently.
Not correct export only works for variables that already exist in the environment.
Wrong. `export NAME=value` creates the variable and marks it for export in one step. Existence beforehand is not required.
Not correct Environment variables must be assigned with set instead of export.
Wrong. `set` is a real builtin, but it toggles shell options and sets positional parameters. It does not create environment variables.
Correct Executing the script starts a child shell, and a child can never alter its parent's environment.
Correct. Exported variables propagate downward to children only. To change the current shell you must run the script with `source setenv.sh` or `. setenv.sh`, which executes its lines in the current shell.
Why
Executing a script forks a new process running a new shell. Anything that shell changes, including variables, the working directory and umask, dies with it. Sourcing (`.` or `source`) does not fork: the commands run in the current shell, so their side effects persist. This is exactly why ~/.bashrc is sourced rather than executed.
Where this comes from
- Cited
- LPI exam objective 105.1
- What it says
- Understand the difference between sourcing a file and executing it.
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.
More questions on this objective
- A user logs in at a text console, and bash starts as an interactive login shell. Which file in that user's home directory is read by bash itself as part of login startup? machine-checked
- You are already logged in to a graphical desktop and open a new terminal window, so bash starts as an interactive shell that is not a login shell. Which per-user file does bash read in that case? machine-checked
- In bash, what is the effect of `export MYVAR`? machine-checked
- At a bash prompt you run `alias ll='ls -l'` and it works for the rest of that session, but a terminal window opened afterwards does not recognise `ll`. Which statement explains this and gives the standard remedy? machine-checked
- A command finishes and the shell reports an exit status of 0. What does that mean, and which parameter reports it? machine-checked
- Which statement correctly distinguishes bash's `[[ ... ]]` from `[ ... ]`? machine-checked