mirror of
https://github.com/doomemacs/doomemacs
synced 2025-08-01 12:17:25 -05:00
Some doom commands will generate a temporary script at ~/.emacs.d/.local/.doom.sh so that it can run an arbitrary shell command after the current invocation of bin/doom ends. Very useful for, say, restarting the currently running doom command after a destructive operation, like updating Doom's source code, tangling your literate config, or for launching arbitrary programs, like a new instance of Emacs. This is necessary because elisp lacks an execv implementation. However, for some folks, .doom.sh wasn't executing at all. This meant: 1. Some `doom upgrade`s would upgrade Doom itself but never move on to the second step of the process: updating its packages. 2. Literate config users could tangle their configs on `doom sync`, but the actual syncing process would never happen (#3746). 3. `doom run` would do nothing. I hadn't realized /bin/sh runs bash in POSIX mode (at least, on systems where /bin/sh = bash, like nixOS or macOS). In POSIX mode the script will abort the if a builtin command (like export) returns a non-zero exit code. Since .doom.sh is basically a bunch of exports followed by an arbitrary command, and there are some environment variables that can trigger validation errors (like UID triggering a "read-only variable" error), we have a problem. Hopefully addresses #3746