Show generated files while 1st command is still running, sort of a watchfolder in single script...
23. 6. 2022This is just a model.
#!/bin/bash
# watchfolder (model)
# a simple watchfolder model where 2nd thing does things generated from 1st thing
# while 1st thing is still running and exits nicely
# tmp dir with extended trap that should bring down main as well
# note: kill %% # will kill most recent background job
tmp="$HOME/tmp/test/model"
trap '[ -n "$tmp" ] && rm -fr "$tmp" && kill %%' EXIT
mkdir -m 700 "$tmp" "$tmp/make" "$tmp/show" || { echo '!! unable to create a tmpdir' >&2; tmp=; exit 1; }
# main calculus that creates files while still running here (ffmpeg for example)
for i in {001..020}
do
touch "$tmp/make/${i}.png" && echo "$i" > "$tmp/make/${i}.png" && sleep 0.2
# simulate slow rendering of the main
done &
pid="$!"
# the thing that does something with those files, while the main is still running
# checking if the pid is still active OR some files left to process
while [[ "$(ps -p $pid &>/dev/null)" ]] || [[ "$(ls "$tmp/make"*)" ]]; do
mv "$tmp/make/"* "$tmp/show" 2> /dev/null
# show and remove each
cd "$tmp/show" || exit
for file in *; do
echo -n "$file > " && cat "$file"
rm "$file"
done
sleep 1 # pause between checks
done
Observe file creation and moving with
watch -n 1 tree $HOME/tmp/test/
- This may be useful with ffmpeg scene detection, showing frames in term, while ffmpeg is still generating new ones.
- pid capturing still looks somehow weird, possibly incorrect