#shell #ssh #ipc
Вопрос:
Я не могу найти способ сделать то же самое в интерактивном и неинтерактивном сеансе ssh, чтобы сценарий запуска мог запустить процесс и позволить пользователю просматривать выходные данные.
Простой пример для воспроизведения проблемы, которую я использую-x на bash, чтобы показать команды оболочки отладки, которые имеют a
впереди. :
start_ping_google.sh содержит
#!/bin/bash -x
ping -c4 google.com amp;
echo " I want to see this and the ping results"
sleep 2
echo "after I exit on this line I dont want to see more ping results" amp;amp; exit
Если пользователь запускает этот скрипт с помощью on box (интерактивный сеанс) и выходит из системы, как только скрипт завершается, это не влияет на разветвленный процесс (в данном случае ping). Пример
$ ~/bin/start_ping_google.sh; exit
echo ' I want to see this and the ping results'
I want to see this and the ping results
sleep 2
ping -c20 google.com
PING google.com (142.250.80.46) 56(84) bytes of data.
64 bytes from lga34s34-in-f14.1e100.net (142.250.80.46): icmp_seq=1 ttl=109 time=28.6 ms
64 bytes from lga34s34-in-f14.1e100.net (142.250.80.46): icmp_seq=2 ttl=109 time=28.6 ms
echo 'after I exit we dont care about ping messages'
after I exit we dont care about ping messages
exit
logout
Connection to testbox12 closed.
При открытом другом терминале, если вы смотрите ( watch -n1 'ps auwwx | grep ping | grep -v grep'
), пинг продолжается до 20 пингов.
Every 1.0s: ps auwwx | grep ping | grep -v grep offtest8.s: Wed Sep 22 18:50:36 2021
user1 38679 0.0 0.0 132656 3760 ? S 18:50 0:00 ping -c20 google.com
Это не то же самое, если вы делаете это в неинтерактивном сеансе. Пример
$ ssh testbox12 "~/bin/start_ping_google.sh"
I want to see this and the ping results
echo ' I want to see this and the ping results'
sleep 2
ping -c20 google.com
PING google.com (142.250.80.110) 56(84) bytes of data.
64 bytes from lga34s36-in-f14.1e100.net (142.250.80.110): icmp_seq=1 ttl=110 time=31.0 ms
64 bytes from lga34s36-in-f14.1e100.net (142.250.80.110): icmp_seq=2 ttl=110 time=31.0 ms
after I exit we dont care about ping messages
echo 'after I exit we dont care about ping messages'
exit
64 bytes from lga34s36-in-f14.1e100.net (142.250.80.110): icmp_seq=3 ttl=110 time=31.0 ms
64 bytes from lga34s36-in-f14.1e100.net (142.250.80.110): icmp_seq=4 ttl=110 time=31.0 ms
64 bytes from lga34s36-in-f14.1e100.net (142.250.80.110): icmp_seq=5 ttl=110 time=31.0 ms
^CKilled by signal 2.
В этом случае я делаю ctrl C после еще 3 пингов после точки выхода. Затем пинг прекращается до того, как будет сделано 20 пингов.
Так что я понимаю, почему пинг умирает. Он пытается записать в stdout, но это было сорвано, когда я нажал CTRL C в сеансе ssh (внутри у него будет какая-то ошибка, например ошибка с плохим файловым дескриптором). Чего я не понимаю, так это почему этого не произошло во время интерактивной сессии.
Есть ли способ сделать это, если я не могу редактировать эти сценарии?