ch-image modify: improve non-existent shell error message
When modifying a container image with via `ch-image modify` using a script, we currently don't have a very user-friendly error message when trying to use a shell that doesn't exist via `-S`, e.g. ``` $ ch-image modify -S doesnotexist alpine:3.17 foo <<'EOF' echo hello EOF -1* FROM alpine:3.17 -1. COPY ['/tmp/tmpw5_ww4op'] -> '/ch/script.sh' updating existing image ... -1. RUN.S doesnotexist /ch/script.sh /bin/sh: doesnotexist: not found something went wrong, rolling back ... HEAD is now at 36233bb COPY ['/tmp/tmpw5_ww4op'] -> '/ch/script.sh' error: build failed: RUN command exited with 127 ``` Note that we do have a user-friendly error message for this same problem in interactive mode ``` $ ch-image modify -S doesnotexist alpine:3.17 foo copying image from cache ... ch-run[169241]: error: can't execve(2): doesnotexist: No such file or directory (ch_core.c:570 2) error: can't run shell: doesnotexist ``` This is because in interactive mode we rely on the return value of a `ch-run` subprocess to determine whether the shell is there or not, but we don't perform such a check when traversing the Dockerfile parse tree in the script case.
issue