You want a shortcut mkcd that creates a directory and then changes into it, so that mkcd /srv/app makes and enters /srv/app. Why must this be written as a shell function rather than as an alias?
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
Correct An alias cannot use its argument in the middle of the expansion; arguments are only appended after the whole replacement text
Correct. Alias expansion is textual substitution of the first word, and anything the user typed afterwards simply follows the replacement. A function receives its arguments as $1, $2 and can place them anywhere.
Not correct An alias cannot contain more than one command
Wrong. An alias value may contain several commands separated by semicolons or joined with && perfectly well. The limitation is about argument placement, not about command count.
Not correct An alias cannot run builtins such as cd, only external programs
Wrong. Aliases expand to any command line at all, builtins included; alias up='cd ..' is a common example that works.
Not correct An alias defined in ~/.bashrc is not available at an interactive prompt
Wrong, and backwards. ~/.bashrc is read by interactive shells precisely so that aliases defined there are available at the prompt.
Why
An alias is a first-word text replacement performed while the line is being read, so the words the user typed after it can only end up at the end of the resulting command. A function is a stored compound command that receives positional parameters, so mkcd() { mkdir -p "$1" && cd "$1"; } can use the argument twice and in the middle. The working rule: if the shortcut needs to see or reorder its arguments, or needs any control flow, it has to be a function.
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.
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
- 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? 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