即使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
将其置于前台。