如何在scp传输文件时禁用CTRL-C?

5

我希望我的脚本可以完成一个scp,即使输入了CTRL+C也不中断。我尝试使用一个陷阱来禁用CTRL+C,但是当scp正在进行时它不起作用。 scp会立即终止。是否有任何方法可以实现这一点?下面是简单的代码。

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

更新:还要确保在脚本顶部添加"set -m"。

你可以使用 stty 来临时更改中断字符,以便不使用控制-C。 - Keith Thompson
你为什么要这样做? - Aaron Digulla
3个回答

12
将其放在子 shell 的后台中,与终端分离。
(scp ... &)
编辑:您可能希望将任何错误重定向到文件中。

5
另一种方法是在传输完成之前完全禁用按键中断:
#!/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

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将其带到前台。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接