Imagine we have a long command
sleep 10 (for instance). We would like to execute it on another server using python (the ssh library
paramiko to be specific).
I need a 1 line command that starts the command, prints the PID of the command, and then waits for it to finish and finally returns the exit status of the command.
What I've tried so far:
bash -c "echo $BASHPID ; exec sleep 10" ; echo $?
This prints the PID of the shell, then calls exec on the long command, and then waits and prints the exit status. The problem is
$BASHPID prints the PID of the outer bash shell (possibly indicating calling
bash -c cmd doesn't actually spawn a full new shell?).
If I call the above command in three lines, it works.
bash echo $BASHPID ; exec sleep 10 echo $?
Any attempt using subshells hasn't worked for me either.
echo $(echo $BASHPID ; exec sleep 10) ; echo $?
This works, but the subshell pipes all of its output to echo, and echo prints it all at once, meaning the
$BASHPID doesn't get print until after the sleep finishes. The PID must be print immediately.