2013-09-04 12 views
5

Chcę, aby mój skrypt, aby móc zakończyć się scp, nawet jeśli CTRL + C ujęto. Próbowałem za pomocą pułapki wyłączyć CTRL + C, ale to nie działa, gdy scp jest w toku. scp kończy się natychmiast. Czy jest jakiś sposób to zrobić? Kod znajduje się poniżej. Dość proste.Jak wyłączyć CTRL-C podczas skanowania scp?

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

AKTUALIZACJA: Upewnij się również, że masz ustawiony "set -m" u góry skryptu.

+0

Można użyć 'stty' tymczasowo zmienić przerwania znak do czegoś innego niż control-C. –

+0

Dlaczego to robisz? –

Odpowiedz

12

Umieścić go w tle w podpowłoce, aby odłączyć go od gniazda.

(SCP ... &)

EDIT: Prawdopodobnie będziesz chciał przekierować wszystkie błędy w pliku.

+0

Och, wow. Zbyt łatwe. Dziękuję bardzo za Twoją pomoc. – tkoehn

0

Jeśli chcesz wysłać go do tła i być w stanie uzyskać proces w planie ponownie użyć tego:

$ (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 
$ 

Więc można wysłać postęp w tle z & i zobaczyć wszystkie zadania w tle z jobs i można uzyskać do niego dostęp z %1 i zabić go kill i dostać go na planie z fg.

4

Inną metodą jest wyłączenie klawisza przerwania całkowicie aż przeniesienie odbywa się:

#!/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 
Powiązane problemy