Newsgroup: it.comp.os.linux.sys
Titolo: Stoppati!

Mi domando perché dato un codice di questo tipo:
function get_first_shell {
	for host in $(lab5)
	do
    echo "analyzing $host"
		if $NC -z -w 1 $host 22
		then
	    open_shell $host && break
		fi
	done
}
# tries to open a shell to the host given as input
function open_shell {
	ssh -v -i $KEY -o StrictHostKeyChecking=no $USER@$1 ; exit
}
function lab5 {
	for ((i=1; $i < 40; i=$i+1))
	do
		echo "a105pc$(printf '%02d' $i)"
	done
}
Che in sostanza analizza un po' di pc e quando trova la 22 aperta si
collega, l'ho fatto per avere un accesso rapido a delle macchine di
laboratorio senza vedere quali sono accese e linuxizzate.
Quando esco dalla sessione ssh creata NON termina, ma continua ad
analizzare anche gli altri!
Dovrei tornare true quando esco da open_shell forse, ma come?
Sarà sicuramente una stupidaggine ma ho già provato un n-mila modi...

 analizzare anche gli altri!
Prova a mettere un 
echo $?
nella funzione open_shell, immediatamente dopo l'invocazione di ssh.

 nella funzione open_shell, immediatamente dopo l'invocazione di ssh.
E mostra anche il codice da cui invochi get_first_shell...


Semplicemente
source ./file.sh
get_first_shell
(non prende parametri)
domani provo a vedere cosa restituisce ssh..
Ma a rigor di logica se esco con un EOF dovrebbe restituirmi 0, no?



A prescindere da cosa restituisce, dopo c'e' un "exit" che dovrebbe comunque
terminare il tutto. Chiedevo di vedere il codice da cui la invochi perche'
magari sei in una subshell e l'exit esce dalla subshell, ma non mi pare il
tuo caso...e' un po' strano a dire il vero.


Infatti l'exit l'avevo messo apposta per tagliare la testa al toro
(perfino con ; invece di &&), ci sono rimasto male quando mi sono
accorto che
non terminava lo stesso...

Forse mi ero dimenticato qualche source perché adesso funziona...
E' sufficiente un "return" altrimenti mi uccide la shell corrente
function get_first_shell {
	for host in $(lab5)
	do
    echo "analyzing $host"
		if $NC -z -w 1 $host 22
		then
	    open_shell $host && break
		fi
	done
}
# tries to open a shell to the host given as input
function open_shell {
	ssh -v -i $KEY -o StrictHostKeyChecking=no $USER@$1 ; echo $? ;
return
}
function lab5 {
	for ((i=1; $i < 40; i=$i+1))
	do
		echo "a105pc$(printf '%02d' $i)"
	done
}
Solo che se ci ripenso e provo a killarlo non è d'accordo e nc
continua a volere a collegarsi, forse devo aggiungere
un qualche trap da qualche parte??
Sarebbe anche molto carino riuscire a "salvare una computazione" su
disco fisso (nella home) e poterla continuare da un altro pc,
così a occhio non mi sembra così semplice però sono sicuro che c'è
qualche modo...
Che dite?

 qualche modo...
Se per "computazione" intendi un processo o uno script, puoi usare screen.
Con screen puoi aprire una sessione "virtuale" su un computer, e poi
riconnetterti alla stessa sessione da un altro computer. 
Esempio: lanci un task molto lungo sul pc del lavoro con screen, ti
disconnetti (il task continua a funzionare), e dal computer di casa ti
connetti alla sessione di screen in esecuzione sul computer del lavoro, e
continui da li'. Non so se e' quello che intendi pero'.


Sì intendevo quello ma non come dici tu...
Cosa bella sarebbe aprire una prima shell a caso (anzi magari
aggiungerei un po' di
intellingenza alla scelta), lanciare un comando.
Poi se per caso dovessi disconnettermi (quelle macchine in realtà sono
in dual boot),
salvo tutta la computazione nella home e la rieseguo anche su una
macchina diversa
al prossimo collegamento.
In sostanza un SIGSTOP che salvi su disco invece che tra i jobs di una
certa shell.
Non l'ho mai visto fare ma sicuramente in qualche modo si potrà, tanto
le macchine sono identiche.

 le macchine sono identiche.
Anche se sono identiche non significa che l'ambiente in cui i processi sono
in esecuzione in un certo istante sia uguale (anzi, e' praticamente certo
che non lo sia).
Quello che tu vuoi fare forse e' possibile, ma sicuramente se lo e' ci sono
delle ben determinate condizioni e/o restrizioni (o c'e' intorno un sistema
operativo ad hoc).

Sì immagino che non sia affatto semplice, l'idea semplice e stupida
consisterebbe nello spostare tutto quello che viene "copiato" quando
stoppo un processo
da shell in una shell su un altro pc.
Il problema è che non so cosa effettivamente serva.
Ammettendo di usare solo file nella home e che tutto il resto
dell'albero del filesystem siano uguali (vabbeh a parte
i device al max e sys/proc) cosa non sarebbe fattibile?