( subshell ) to avoid having to cd back.for dir in */
do
cd "$dir"
convert index.png index.jpg
cd ..
donefor dir in */
do
(
cd "$dir" || exit
convert index.png index.jpg
)
doneor
for dir in */
do
cd "$dir" || exit
convert index.png index.jpg
cd ..
doneWhen doing cd dir; somestuff; cd .., cd dir
can fail when permissions are lacking, if the dir was deleted, or if
dir is actually a file.
In this case, somestuff will run in the wrong directory
and cd .. will take you to an even more wrong directory. In
a loop, this will likely cause the next cd to fail as well,
propagating this error and running these commands far away from the
intended directories.
Check cds exit status and/or use subshells to limit the
effects of cd.
If you set variables you can't use a subshell. In that case, you
should definitely check the exit status of cd, which will
also silence this suggestion.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.