В общем, лучший способ проверить, можете ли вы открыть файл - будь то для ввода или вывода - это просто попытаться открыть его.
Более конкретно для вывода, если вы хотите открыть файл для вывода, если это приведет к созданию нового файла, оболочки POSIX предлагают параметр оболочки no-clobber , настраиваемый с помощью установлен
, поэтому вы можете использовать это, чтобы проверить, существует ли вывод перед продолжением.
Попытаться разобраться в вашем текущем сценарии немного сложно, но, возможно, рассмотрите:
set -C -- '/Volumes/My Passport/Documents/Projects/untitled folder 2/untitled folder 3/untitled folder 2/untitled folder/'*/*_1.fastq
[ -e "$1" ] &&
for f
do if cd -- "${f%/*}" &&
f=${f##*/} f=${f%1*}
then if command exec \
3> "$f"1_trimmed.fastq \
4> "$f"2_trimmed.fastq \
5> "$f"_trimmed_sorted_1.fastq \
6> "$f"_trimmed_sorted_2.fastq
then ~/Desktop/UTSW/Applications/bbmap/bbduk.sh -Xmx120g in1="$f"1.fastq in2="$f"2.fastq out1=/dev/fd/3 out2=/dev/fd/4 ref="${adapter}" trimq=10 &&
paste - - - - < "$f"1_trimmed.fastq | sort ... | tr >&5 ... &&
paste - - - - < "$f"2_trimmed.fastq | sort ... | tr >&6 ...
fi
fi
done
Ваши скрипты продолжают звонить друг другу, так что рано или поздно у вас закончится место в стеке или память (, но, вероятно, ненадолго ).
В качестве лучшего кода вы должны рассмотреть возможность использования одного скрипта, который делает паузу на минуту перед циклом:
#!/bin/bash
incoming=/mnt/md0/User/admin/home/incomingdata
while :
do
# connect to server download files
rsync -ae "ssh -p 10045 -T -o Compression=no -x" --progress --delete appbox@filebot.witzend007.appboxes.co:/APPBOX_DATA/apps/rutorrent.witzend007.appboxes.co/torrents/completed/toNAS "$incoming/"
# copy files to temp folder
cp -r "$incoming/toNAS/." "$incoming/temp"
# Start Filebot and organise and rename files to plex library
~/filebot-portable/filebot.sh -script fn:amc --output "/mnt/md0/public/Media" --action move -non-strict "$incoming/temp" --log-file amc.log --def excludeList=amc.txt
# remove temp folder/files
rm -r "$incoming/temp"
# Wait 60 seconds
sleep 60
done