2013-09-04 14 views
5

Voglio che il mio script sia in grado di completare un scp, anche se CTRL + È inserito C. Ho provato a utilizzare una trap per disabilitare CTRL + C, ma non funziona quando è in corso la scp. Il scp termina immediatamente. C'è un modo per fare questo? Il codice è sotto Abbastanza semplice.Come disattivare CTRL-C durante scp?

#!/bin/bash 
trap '' SIGINT SIGTERM 
scp -q [email protected]:/backup/large_file.txt /local/dir/ 

AGGIORNAMENTO: Assicurarsi inoltre di avere "set -m" nella parte superiore dello script.

+0

si potrebbe usare 'stty' per cambiare temporaneamente il carattere di interruzione a qualcosa di diverso da control-C. –

+0

Perché stai facendo questo? –

risposta

12

Inserirlo in sottofondo per disconnetterlo dal terminale.

(SCP ... &)

EDIT: Probabilmente desidera reindirizzare eventuali errori in un file.

+0

Oh wow. Troppo facile. Grazie mille per il vostro aiuto. – tkoehn

0

Se si desidera inviare a sfondo ed essere in grado di ottenere il processo in primo piano ancora una volta utilizzare questo:

$ (sleep 10 ; echo hello) & 
[1] 1323 
$ jobs 
[1] + running (sleep 10; echo hello;) 
$ kill %1 
$ 
[1] + 1323 terminated (sleep 10; echo hello;) 
$ $ 
$ (sleep 10 ; echo hello) & 
[1] 1325 
$ jobs 
[1] + running (sleep 10; echo hello;) 
$ fg %1 
[1] + 1325 running (sleep 10; echo hello;) 
^C 
$ 

Quindi è possibile inviare i progressi in background con & per vedere tutte le operazioni in background con jobs e puoi accedervi con %1 e ucciderlo con kill e portarlo in primo piano con fg.

4

Un altro metodo è quello di disattivare completamente l'interrupt chiave fino a quando il trasferimento è fatto:

#!/bin/bash 
STTY=$(stty -g)      # Save settings 
stty intr undef      # Disable interrupt 
echo -n "Press ENTER to continue: " # Do your file transfer here 
read response 
stty ${STTY}       # Restore settings