В bash
вы не можете дождаться замены процесса. In:
cmd1 > >(cmd2)
вся команда завершается, как только cmd1
завершается, независимо от статуса cmd2
.
Вы должны реализовать механизм, сигнализирующий родительскому процессу о завершении cmd2
. Простой способ с использованием FIFO:
#!/usr/bin/env bash
trap 'rm wait.fifo' EXIT
mkfifo wait.fifo
echo 'hello' | tee \
>( sleep 3; cat /dev/stdin; : >wait.fifo ) \
>( sleep 2; cat /dev/stdin; : >wait.fifo ) \
>( sleep 1; cat /dev/stdin; : >wait.fifo )
for (( i=0;i<3;i++ )); do read <wait.fifo; done
Попробуйте screen ssh $USER@$HOSTNAME
на сервере.
Решение kinit && aklog
у меня не сработало, но я нашел это решение "sshception". На экране я подключаюсь к той же машине по ssh и запускаю свои программы в этом сеансе ssh. Даже если экран теряет разрешение, сеанс ssh внутри остается открытым и аутентифицированным.