我有一个带有一些文件操作的 bash 脚本,我想在按下CTRL+后处理一个循环直到块结束C。我做了一个例子:
#!/bin/bash
# Register signal handler
ABORT=0;
trap ABORT=1 SIGINT;
# Create temp dir
TEMPDIR=$(mktemp -d -t $0);
# Helper functions
function do_other_stuff {
true;
}
# Process files
for ((COUNTER = 0; COUNTER < 3 && ABORT == 0; COUNTER++)); do
FILE=/some/directory/$COUNTER.txt;
BASE=$(basename $FILE);
cp $FILE $TEMPDIR;
> $FILE;
do_other_stuff;
cp $TEMPDIR/$BASE $FILE;
rm $TEMPDIR/$BASE;
done;
rm -rf $TEMPDIR;
这似乎工作得很好,但我注意到,有时 BASE 在语句中
BASE=$(basename $FILE);
如果在 basename 命令期间发生陷阱,则未设置。这会导致cp
以下命令和以下命令出错。
我错过了什么吗?bash 的意图是如何从陷阱中恢复?是否有另一种具有相同效果的解决方案?