#bash #shell #scripting
#bash #оболочка #создание сценариев
Вопрос:
Я написал пару сценариев для генерации QR-кода каждый раз, когда файл .cia загружается на мой домашний ftp, чтобы просмотреть папку, которую я использовал inotify. Проблема возникает, когда у меня есть файл с пробелами, имеющий «one two three.cia», он сгенерирует 4 QR-кода: one.png, two.png, three.png и one_two_three.png (который является единственным, который мне нужен).
РЕДАКТИРОВАТЬ: Если я запущу ./ despacer «имя файла one.cia», а затем ./ rename, я получу желаемый результат. Я предполагаю, что это сужает проблему до qr.sh
Идеи? Большое спасибо!
qr.sh
#!/usr/bin/env bash
dir=/ftproot
while true
do
inotifywait -m -q --format '%w%f' -e create,moved_to $dir | while read FILE; do
if [[ $FILE == *.cia ]]; then /ftproot/despacer.sh "$FILE" amp; /ftproot/rename.sh
fi
done
done
despacer.sh
#!/bin/bash
mv "$1" `echo $1 | sed 's/ /_/g'` 2>/dev/null
rename.sh
#!/bin/bash
basename -s .cia *.cia > qr.txt
for i in $(cat qr.txt);
do qrencode -o $i.png http://www.mywebsite.com/$i.cia
done
mv *.png qr/
rm qr.txt
exit
Комментарии:
1. Однако вам следует запускать свои скрипты shellcheck.net
Ответ №1:
Существует несколько проблем с кавычками, это причина сбоя с пробелами. Наиболее проблематичным является вызываемый вами скрипт rename.sh
.
Все три отредактированных:
qr.sh
#!/bin/bash
dir=/ftproot
while true
do
inotifywait -m -q --format '%w%f' -e create,moved_to "$dir" |
while read -r FILE; do
if [[ $FILE == *.cia ]]
then
/ftproot/despacer.sh "$FILE" amp; /ftproot/rename.sh "$FILE"
fi
done
done
despacer
#!/bin/bash
mv "$1" "${1// /_}"
rename.sh
#!/bin/bash
encode(){
for i in "${@#.cia}";
do qrencode -o "$i.png" "http://www.mywebsite.com/$i.cia"
done
}
encode "$@"
mv ./*.png qr/
Я не запускал скрипты, но считаю, что они верны.
Комментарии:
1. Спасибо! проверено, и единственная проблема заключается в том, что он создает 2 файла png, один с пробелами, а другой без пробелов