Sujet : Re: (shellcheck) SC2103
De : janis_papanagnou+ng (at) *nospam* hotmail.com (Janis Papanagnou)
Groupes : comp.unix.shellDate : 05. Mar 2025, 20:02:05
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vqa73f$2huko$1@dont-email.me>
References : 1 2
User-Agent : Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0
On 05.03.2025 19:40, Kaz Kylheku wrote:
On 2025-03-05, Kenny McCormack <gazelle@shell.xmission.com> wrote:
All testing done with shellcheck version 0.10.0 and bash under Linux.
>
Shellcheck says that you should replace code like:
>
cd somedir
do_something
cd .. # (Or, cd -, which is almost, but not exactly the same thing)
>
with
>
(
cd somedir
do_something
)
That obviously won't work if do_something has to set a variable
that is then visible to the rest of the script.
Indeed. Only for strict hierarchical semantics it makes sense.
Forking a process just to preserve a current working directory
is wasteful; we wouldn't do that in a C program, where we might
open the current directory to be saved, and then fchdir back to it.
Shells may be different. While Bash regularly creates a subprocess,
Ksh in certain structures creates just a "subshell context" without
forking/cloning an own process.
[...]
but the more general pattern would be:
>
cd somewhere;...;cd -
cd - will break if any of the steps in between happen to to cd;
it is hostile toward maintenance of the script.
Indeed.
Just note that spending a "subshell context"[Ksh] or a subprocess
[Bash] keeps the structure intact. (If you want to pay for that;
especially when it's costly [as in Bash].)
Janis
[...]