我希望我的脚本可以完成一个scp
,即使输入了CTRL+C也不中断。我尝试使用一个陷阱来禁用CTRL+C,但是当scp
正在进行时它不起作用。 scp
会立即终止。是否有任何方法可以实现这一点?下面是简单的代码。
#!/bin/bash
trap '' SIGINT SIGTERM
scp -q user@server:/backup/large_file.txt /local/dir/
更新:还要确保在脚本顶部添加"set -m"。
#!/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
$
因此,您可以使用&
在后台发送进度,并使用jobs
查看所有后台任务,可以使用%1
访问它并使用kill
将其终止,也可以使用fg
将其带到前台。
stty
来临时更改中断字符,以便不使用控制-C。 - Keith Thompson