如何在scp期间禁用CTRL-C?

即使input了CTRL + C ,我也希望脚本能够完成scp 。 我曾尝试使用陷阱来禁用CTRL + C ,但它在scp进行时不起作用。 scp立即终止。 有没有办法做到这一点? 代码如下。 很简单。

 #!/bin/bash trap '' SIGINT SIGTERM scp -q user@server:/backup/large_file.txt /local/dir/ 

更新:还要确保你的脚本的顶部有“set -m”。

把它放在一个子shell的后台,将其与终端断开连接。

(scp …&)

编辑:你可能会想将任何错误重定向到一个文件。

另一种方法是完全禁用按键中断,直到完成传输:

 #!/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 

如果你想把它发送到后台,并能够在前台再次获得进程使用这个:

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

因此,您可以使用&在后台发送进度,并查看所有后台任务,您可以使用%1访问它并使用kill并使用fg将其置于前台。