cp a b && mv b c && rm a &
корректно. &
имеет более низкий приоритет, чем &&
.Действительно? &
имеет более низкий приоритет, чем что-нибудь кроме ;
и новая строка: &
находится в той же синтаксической категории как ;
, причем различие - это ;
выполняет список команд на переднем плане в то время как &
выполнения это в фоновом режиме. Можно протестировать это на себя:
$ dash -c 'sleep 2 && echo waited & echo backgrounded'
backgrounded
$ waited
То же с pdksh, ksh93, удар, csh, tcsh.
Исключением является zsh, который является странно несовместимым. Это документируется в руководство:
Если подсписок завершается a
&
,&|
, или&!
, оболочка выполняет последний конвейер в нем в фоновом режиме и не ожидает его для окончания (отметьте различие от других оболочек, которые выполняют целый подсписок в фоновом режиме).
К сожалению, zsh ведет себя таким образом даже в sh или ksh режиме эмуляции. Чтобы удостовериться, что целая команда выполняется в фоновом режиме, помещает фигурные скобки или круглые скобки вокруг этого. Круглые скобки создают подоболочку, тогда как фигурные скобки не делают, но это не важно (за исключением микрооптимизации в некоторых оболочках), так как фоновая команда находится в подоболочке так или иначе.
{ cp a b && mv b c && rm a; } &
Теоретически, программа, потерявшая соединение с X-сервером, может просто попробовать переподключиться, пока не появится новый X-сервер. На самом деле, я писал программы, которые делают это. Для этого нужен дополнительный код, потому что Вам нужно заново запустить процедуру инициализации GUI, чтобы воссоздать Ваши ресурсы (окна, битовые карты, шрифты и т.д.) на новом X-сервере, и обновить все внутренние структуры данных Вашей программы, чтобы использовать эти новые ресурсы.
К сожалению, почти ни одна программа для X, которую я когда-либо видел, не хочет этого делать. Они просто выходят из строя, потому что все переподключения/восстановления - это слишком большая проблема. И более печально, что их нельзя обмануть, переключая X-серверы, потому что этот код для повторного ввода их графических ресурсов в этой программе не существует . Так что для большинства программ они обречены, если потеряют X-соединение.
Как упоминал XTaran, существует аккуратная программа ретрансляции/шиммирования/прокси под названием ''xpra'', которая действует как X-сервер для клиентов, а затем может выполнять повторную инициализацию их ресурсов в любой другой X-сервер, позволяя Вам перемещать все программы между X-серверами так, как Вы хотели. Когда я использовал его 10 лет назад, в нем было много ошибок. Я уверен, что с тех пор они продвинулись, но Вам необходимо выяснить, достаточно ли стабилен он для ежедневного использования на рабочем столе.
X0VNCSERVER
(в Debian и Ubuntu в пакете VNC4Server
) может помочь восстановить доступ к разбитому или, по крайней мере, не более доступным X сеансом, например, С X0VNCSERVER Дисплей =: 0
.
, а затем есть XPRA , который , который позволяет пользователю просматривать удаленные приложения X на их локальной машине и отключить и снова подключиться к удаленному компьютеру, не теряя состояния беговых приложений Согласно описанию пакета XPRA Debian.
Может быть, один из двух инструментов помогает (если помощь не слишком поздно).