|
From: | Grisha Levit |
Subject: | bash 4.4 messed up input with certain background processes |
Date: | Wed, 29 Jun 2016 13:39:10 -0400 |
The observed condition is input getting split between the shell and the background process. I couldn’t figure out what the general case is to trigger this, but I can observe it when an ssh process with an open unix socket is placed in the background.
Below is my recipe to reproduce. First step is to create an SSH “master” connection, which creates a socket and runs in the background. This can be done in a separate shell.
The step that triggers the issue is to start an ssh process that connects to that socket, and then put that in the background.
# set up control master
mkdir -p ~/.ssh/sockets
chmod 0600 ~/.ssh/sockets
ssh -Nf -o 'ControlMaster=auto' \
-o 'ControlPath=~/.ssh/sockets/%r@%h:%p' \
-o 'ControlPersist=600' \
localhost
# start an ssh session that uses the above socket and put it in the background
ssh -o 'ControlMaster=auto' \
-o 'ControlPath=~/.ssh/sockets/%r@%h:%p' \
localhost 'read -d0; echo; echo "read: $REPLY"' &
# type in 1234567890000
Produces output like:
bash-4.4$ ssh -o 'ControlMaster=auto' -o 'ControlPath=~/.ssh/sockets/%r@%h:%p' localhost 'read -d0; echo; echo $REPLY' &
[1] 26868
bash-4.4$ 1346800
read: 2579
^C
[1]+ Done ssh -o 'ControlMaster=auto' -o 'ControlPath=~/.ssh/sockets/%r@%h:%p' localhost 'read -d0; echo; echo $REPLY'
bash-4.4$
[Prev in Thread] | Current Thread | [Next in Thread] |