On Sat, Feb 17, 2024 at 01:30:00PM +0000, John Larew wrote: > Repeat-By: 1: (sleep 15s; set -m; fg %%; exit ) & 2: (sleep 15s; set -m; fg > %+; exit ) &
You're using %% or %+ inside a shell where there have NOT been any background jobs created yet. The sleep 15s runs in the foreground, because it doesn't have a & after it. > Fix: (sleep 15s; set -m; kill $PPID) & Not a preferred solution; I prefer > a smaller hammer. It's not clear to me what you're trying to do in the first examples. Did you think that the subshell would somehow "take over" the terminal and become the interactive shell, after the 15 second delay? And what would that achieve, if it worked? In the "Fix" example, you're killing the main shell's parent, which is most likely a terminal emulator. Did you want to kill the main shell instead of the terminal? If so, you can get its PID with the $$ variable. Even inside a subshell, $$ always refers to the main shell's PID. If you want the subshell's PID, use BASHPID instead. What exactly is it about the "Fix" example that you don't prefer? What goal are you trying to achieve?