%20%D0%9A%D0%B0%D0%BA%20%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D1%8C%20%D1%8D%D0%BA%D0%B7%D0%B5%D0%BC%D0%BF%D0%BB%D1%8F%D1%80%20%D1%83%D0%B6%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%8E%D1%89%D0%B5%D0%B3%D0%BE%20%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B2%20%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D0%B5%20%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8%3F.png)
Для пояснения я использую Firefox, но это происходит и с другими приложениями, вот скрипт:
$ cat ff.sh
#!/bin/sh
firefox http://superuser.com/
echo "$?"
Допустим, Firefox закрыт, когда я запускаю
$ ./ff.sh
скрипт блокируется до тех пор, пока я не закрою Firefox. Только после этого я получаю код выхода.
0
$
Теперь предположим, что Firefox уже запущен. Когда я запускаю скрипт, он открывает новую вкладку Firefox и работает до конца. (А Firefox продолжает работать.)
$ ./ff.sh
0
$
Как мне добиться того, чтобы поведение было таким же, как в первом примере, независимо от начального условия? По сути, я хочу добиться противоположного
$ cmd &
решение1
Выглядит так, будто он работал асинхронно, хотя на самом деле это не так.
При запуске Firefox проверяет наличие существующего экземпляра, если находит, делегирует управление существующему экземпляру и завершает себя. Отсюда и путаница.