ssh targetHost и; fg - не работает, но почему?

Просто используйте time когда Вы называете сценарий:

time yourscript.sh
1
30.09.2013, 17:40
3 ответа

Вы перепутываете два различных случая:

  • foo ; bar будет выполнять нечто, ожидать его, чтобы закончить и затем управлять баром
  • foo & bar запустит нечто, поместит его в фон и запустит панель непосредственно впоследствии.

Необходимо решить, или использовать тот или другой. Вы не можете сделать обоих.;)

Для решения Вас проблема можно просто выполнить все задания в фоне и затем использовать job перечислять pids:

michas@lenny:~$ sleep 10 &
[1] 18007
michas@lenny:~$ sleep 10 &
[2] 18011
michas@lenny:~$ sleep 10 &
[3] 18015
michas@lenny:~$ sleep 10 &
[4] 18019
michas@lenny:~$ sleep 10 &
[5] 18026
michas@lenny:~$ jobs -p
18007
18011
18015
18019
18026
michas@lenny:~$ 

Вам также не обязательно нужен pids для отправки сигналов уничтожения. Например, kill %1 уничтожит первый фоновый процесс.

2
27.01.2020, 23:21

&; является всегда неправильным. Если Вы хотите выполнить вещи в фоновом режиме в компактной остроте, опустите''; полностью и просто используйте & между командами.

for i in ./*; do my_command "$i" & done

# см. http://mywiki.wooledge.org/BashPitfalls

1
27.01.2020, 23:21

Другие уже объяснили почему &; сбои. Я хотел t =o, указывают, что PID последнего фонового процесса сохраняется как $!. Можно, поэтому, всегда получать доступ к PID последней команды:

ssh targetHost & echo $!; fg

Что касается уничтожения их, можно уничтожить все ssh сессии с этой командой:

pkill -x ssh

x причины pkill и pgrep для соответствия полному названию команды это гарантирует, что Вы не уничтожите sshd или ssh-agent. Если Вы только хотите уничтожить соединения с определенной машиной, Вы могли бы также сделать это:

pkill $(pgrep -alx ssh | grep TARGET_IP | cut -d ' ' -f 1)
1
27.01.2020, 23:21

Теги

Похожие вопросы