2013-09-04 18 views
5

CTRL + と入力しても、スクリプトでscpを終了できるようにします。私は無効にするトラップを使用しようとしましたCTRL + Cしかし、scpが進行中のときには機能しません。 scpはすぐに終了します。これを行う方法はありますか?コードは以下のとおりです。ものすごく単純。scp中にCTRL-Cを無効にするには?

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

更新:スクリプトの上部に「set -m」があることを確認してください。

+0

あなたは一時的に制御-C以外に割り込み文字を変更するには、 'stty'を使用することができます。 –

+0

なぜあなたはこれをやっていますか? –

答えて

12

サブシェルにバックグラウンドで置いて、端末から切断します。

(SCP ... &)

EDIT:あなたはおそらく、ファイルにすべてのエラーをリダイレクトすることをお勧めします。

+0

ああ。あまりにも簡単です。助けてくれてありがとう。 – tkoehn

0

あなたが背景に送信し、フォアグラウンドでプロセスを得ることができるようにしたい場合は、再びこれを使用する:

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

ですから、&と、バックグラウンドで進行状況を送信し、jobsですべてのバックグラウンドタスクを見ることができます%1でアクセスしてkillで終了し、fgでフォアグラウンドに戻すことができます。

4

もう一つの方法は、転送が完了するまで完全に割り込みキーを無効にすることです:

#!/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 
関連する問題