tar
для ленточного архива, и это на основе потоков. tar
не может пойти назад для стирания то, что это уже записало. Так, то сообщение должно сказать Вам, которые, что находится в архиве, не могут быть последовательными, поскольку это изменилось, будучи записанным.
То, что происходит, то, что для каждого файла, tar
пишет заголовок, который включает путь к файлу, метаданные (владение, разрешение, время...) и размер (n байты) и затем продолжает выводить те n байты путем чтения его из файла. Если размер файла изменяется в то время как tar
выводит его содержание, tar
не может возвратиться и изменить заголовок для высказывания, нет после того, как весь размер не был n, но p. Все, что это может сделать, усечь содержание к n байтам, если p больше, чем n или клавиатура с нулями, если это меньше.
В обоих случаях Вы получите сообщение об ошибке.
wait-for
Таким образом, базовое использование wait -for не слишком сложно, если рассматривать его как аналог потоковой обработки примитивов параллелизма
На самом деле это не связано с другими функциями tmux, это просто удобная реализация IPC.
wait-for event_name
похоже на ожидание события wait-for -S event_name
является средством сигнализации события
Опции -U
и -L
ортогональны и действуют как семафоры
Вы можете решить эти виды состояния гонки с помощью wait-for
, но только если команды синхронны.
tmux send-keys 'sync-command ; tmux wait-for -S command-finished' C-m
tmux wait-for command-finished
Проблема, с которой вы столкнулись, заключается в том, что команда ssh не является синхронной. :Вы не можете сказать, когда она завершилась.
Просматривая руководство мы находим директиву LocalCommand
, которая, похоже, делает то, что нам нужно :запустить команду локально после завершения соединения, чтобы мы могли вызвать
ssh root@iris.tatw.name -o 'PermitLocalCommand yes' -o 'LocalCommand tmux wait-for -S done'