Crea tmux block fino al completamento del programma


8

Sono impressionato dalle funzionalità di controllo remoto di tmux:

tmux new-window -t p12346 'echo foo;sleep 10' 

Ciò crea una nuova finestra nella sessione denominata p12346 e non stampa nulla sullo schermo. È grandioso. Ma come posso dire al comando sopra di aspettare fino al termine del sonno prima di tornare? Vale a dire che voglio fare lo stesso, ma impiegare 10 secondi per eseguire:

time tmux new-window -t p12346 'echo foo;sleep 10' 

sfondo

Se questo è praticabile, potrebbe diventare una funzionalità di GNU Parallel: è possibile accedere ai lavori attualmente in esecuzione attraverso ciascuna finestra tmux, in modo da poter seguire l'avanzamento di ciascun lavoro in tempo reale.

Quindi tmuxnon verrà eseguito in primo piano: l'utente dovrà collegarsi ad esso.

Risposte:


8

tmux 1.8 ha introdotto il wait-forcomando che può aiutarti a fare quello che vuoi:

time tmux new-window -t p12346 'echo foo;sleep 10;tmux wait-for -S p12346-neww-done' \; \
          wait-for p12346-neww-done

Il nome del "canale" ( p12346-neww-donenell'esempio sopra) può essere quello che ti piace (purché sia ​​lo stesso in entrambi i posti; se prevedi più invocazioni potenzialmente simultanee, probabilmente vorrai anche usare un valore univoco per ogni invocazione ). La parte importante è che "attendi" il segnale dopo il new-windowcomando (come parte dello stesso comando tmux , quindi il punto e virgola sfuggito: tmux deve elaborarlo, non la shell) e inviare il segnale come ultimo passo di il comando della finestra.

Se devi essere un po 'più robusto contro la sequenza di comandi che si interrompe in modo brutto o inopportuno, allora potresti provare a utilizzare una shell trap per inviare il segnale (riorganizzato un po' per leggibilità (?)):

time \
tmux new-window -t p12346 '
       trap "tmux wait-for -S p12346-neww-done" 0
       echo foo
       sleep 10
       ' \; wait-for p12346-neww-done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.