![在脚本末尾执行命令](https://linux22.com/image/128867/%E5%9C%A8%E8%84%9A%E6%9C%AC%E6%9C%AB%E5%B0%BE%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4.png)
我想复制一些文件,但我想等待执行复制命令直到脚本结束。这样做的原因是我可以预期用户输入会中途中断脚本,并且我不会部分复制目录。
有什么方法可以等待执行特定命令,直到exit 0
在同一个程序中看到 ?
#!/bin/bash
for f in 'find something/ -newer something_else -type f'; do
#Expecting user input interruption
cp "$f" . #I want to wait executing this
done
if [ -f something_else ]; then
exit 0 #I want it executed here
else
exit 1
fi
答案1
最简单的解决方案是稍后进行复制:
#!/bin/bash
# something something script stuff
[ ! -f somefile ] && exit 1
find something -type f -newer somefile -exec cp {} . ';'
如果您希望用户确认每个副本,请使用-ok
而不是-exec
in find
:
find something -type f -newer somefile -ok cp {} . ';'
首先循环文件以创建要复制的文件列表,要求用户输入每个文件,以及然后执行复制:
copy_these=$(mktemp)
find something -type newer somefile \
-exec bash -c '
read -p "Copy $0? [y/n/q]: "
case "$REPLY" in
[yY]*) printf "%s\n" "$0" ;;
[qQ]*) exit 1 ;;
esac' {} ';' >"$copy_these"
# do other stuff
# then copy the files
xargs cp -t . <"$copy_these"
rm -f "$copy_these"
请注意,这假设所有文件名都表现良好(没有换行符),并且cp
使用 GNU。