我有一個 bash 腳本,它處理由 GUI 輸出的檔案。我讓它休眠了一段時間,如果它找到檔案,那么它會回傳回圈。但是,如果腳本在睡眠期后沒有找到任何檔案,但如果在睡眠期生成檔案,則我希望腳本退出,然后回傳回圈。但是如果腳本沒有檢測到任何檔案,它就會陷入回圈以保持睡眠。我的腳本如下所示:
#!/bin/bash
current_directory=$(pwd)
folder=1
while [ $folder -le 100 ]; do
fast5files=$(ls $current_directory/fast5/ | grep ".fast5" | wc -l)
if [ $fast5files -ge 1 ]
then
mkdir $current_directory/fast5/$folder
mv $current_directory/fast5/*.fast5 $current_directory/fast5/$folder/
program does something to fast5files here
another program does something to fast5files here
sleep $1 #variable set by user
((folder ))
elif [ $fast5files -eq 0 ]
then
echo "Couldn't find enough fast5 files. Waiting for 15 seconds"
sleep 15
elif [ $fast5files -eq 0 ]
then
echo "Exiting script due to not enough fast5 files"
exit 1
fi
done
uj5u.com熱心網友回復:
您設定folder并檢查它,但從不修改它。
folder=1
while [ $folder -le 100 ]; do ...
break如果它永遠不會被修改,那么如果沒有手冊或類似的exit東西,回圈將永遠不會結束。
也許像 -
countFiles() { local lst=( fast5/*.fast5* );
if [[ -e $lst ]]; then cnt=${#lst[@]}; else return 1; fi;
return $((!cnt));
}
while true; do
if countFiles
then echo doing stuff :$cnt:
flag=0
elif (( flag > 0 ))
then echo "Exiting script due to not enough fast5 files"
exit 1
else (( flag))
echo "Couldn't find enough fast5 files. Waiting for 15 seconds"
sleep 15
fi
done
這是快速而草率的,從函式內部設定全域等,但應該給你一些想法。
uj5u.com熱心網友回復:
您需要在 sleep 陳述句之后添加退出。您創建了一個新的 elif 分支,該分支將永遠不會匹配,因為它之前已經匹配
#/bin/bash
current_directory=$(pwd)
folder=1
while [ $folder -le 100 ]; do
fast5files=$(ls $current_directory/fast5/ | grep ".fast5" | wc -l)
if [ $fast5files -ge 1 ]
then
# do something here
return 1
elif [ $fast5files -eq 0 ]
then
echo "Couldn't find enough fast5 files. Waiting for 15 seconds"
sleep 15
echo "now exiting"
exit 1
fi
那就是說我不知道??你為什么還想睡覺,而不僅僅是退出,你也可以只更新回圈陳述句以在 fast5files 為 0 時退出,即
#/bin/bash
current_directory=$(pwd)
folder=1
fast5files=1
while [ $folder -le 100 -o $fast5files -ge 0 ]; do
# do stuff
sleep 15
fast5files=$(find -type f -printf '.' -name '*.fast5' | wc -l)
done
僅供參考,當前腳本中的任何內容都不會更新檔案夾引數,因此部分陳述句將始終為真
uj5u.com熱心網友回復:
您無需在mving 之前檢查 *.fast5 檔案是否存在。只需嘗試mv它們并檢查mv. 可能這就是您正在尋找的內容:
#!/bin/bash
slept=0
n=1
while ((n <= 100))
do
mkdir -p fast5/$n || exit
if mv fast5/*.fast5 fast5/$n 2>/dev/null
then
(( n))
slept=0
elif ((!slept))
then
sleep 15
slept=1
else
break
fi
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/521146.html
標籤:重击壳
