Komut dizisinin aynı çalışma dizininde bulunan mevcut bir metin dosyasında çalışan bir bash betiği fark ettim. Betik, bir işlev parametresiyle hesaplanacak dosyanın adını alır.
Sorun betiği çalıştırdığımda dosyayı bulamıyor olmasıdır. Zaten çağrıldığında fonksiyonun pozisyon parametresini kontrol ettim ve dosyanın adı doğru. Ancak bu dosya adı "[-e dosyaadı]" veya bunun üzerine başlatılan bir komut (örneğin, cat dosyaadı) üzerine bir kontrol bir hata döndürür. Dosya adı bulunamadı.
Senaryomu yapıştırıyorum ..
#!/bin/bash
query=
loan=
function count(){
local valore=0
local wordcmp
TMPFILE=$(mktemp)
if [ -n "$query" ]; then
wordcmp=$query
else wordcmp=$loan
fi
echo $1 (here print the correct file name passed by the caller)
for FILE; do
if [ -e $FILE ]; then
cat $FILE | grep $wordcmp > $TMPFILE
exec 3< $TMPFILE
while read -u 3 line; do
valore=$(($valore + ${line#$wordcmp}))
done
exec 3>&-
echo "$wordcmp $valore"
echo "Bye."
else
echo "$0: error --- log file $FILE not found" 1>&2
fi
valore=0
done
}
set -- `getopt -o "h" -l "query,loan" -- "$@"`
while true; do
case "$1" in
--query) query=QUERY
shift;;
--loan) loan=LOAN
shift;;
-h) echo "$0: help" 1>&2
echo "usage: $0 --query logfile for query summary" 1>&2
echo "usage: $0 --loan logfile for loan summary" 1>&2
echo "usage: $0 -h for this help message" 1>&2
exit 1;;
--) shift
break;;
esac
done
if [ -z "$query" -a -z "$loan" ]; then
echo "$0: you must specify at least one option and log file(s)" 1>&2
echo "please type $0 -h for help" 1>&2
exit 1
fi
if [ $# = 0 ]; then
echo "$0: you must specify at least one log file" 1>&2
echo "please type $0 -h for help" 1>&2
exit 1
shift
fi
count $@
Myscript --query filename.log çağrılırken çıktısı:
"./myscript.sh: error --- log file 'dosyaadı.log' bulunamadı"
(ancak "dosyaadı.log" dosyası, komut dosyası başlatıldığında yerel dizinde bulunur)
Herhangi bir fikir?
Herkese teşekkürler