5

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

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

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

4

3 回答 3

12

Put it in the background in a subshell to disconnect it from the terminal.

(scp ... &)

EDIT: You'll probably want to redirect any errors to a file.

于 2013-09-04T16:29:33.760 回答
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
于 2013-09-06T09:41:05.597 回答
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.

于 2013-09-04T17:28:49.930 回答