- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
#!/bin/bash
CODE='timezone.txt'
WDIR="dl-${CODE}"
TGTDIR="/etc/puppet/modules/nginx/files/etc/nginx/maxmind/"
URL='http://www.maxmind.com/timezone.txt'
mkdir "${WDIR}"
cd "${WDIR}"
wget ${URL} -O "${CODE}"
find -name "${CODE}" | while read F
do
chown root:root -vf "${F}"
chmod -vf 644 "${F}"
mv -vf "${F}" "${TGTDIR}"
TMPDIR=`dirname "${F}"`
if [[ ${TMPDIR} == '.' || ${TMPDIR} == '..' || ${TMPDIR} == '/' ]]
then
# root's rm -rf safety
continue
fi
echo rm -rfv "${TMPDIR}"
rm -rfv "${TMPDIR}"
done
* нафига find скачанного файла? Может быть realpath хотя бы?
* CODE лучше бы передавать аргументом ( ане через глобальную переменную окруженмя)
* на 14 строчке лучше бы проверить, что файл есть
* защита на 19 строке -- странная. А если там ``/etc/`` ? А если ``~`` ?
* ${TMPDIR} лучше всегда брать в кавычки если уж по канонам
...тут бы точно не был лишним
>CODE='timezone.txt'
>WDIR="dl-${CODE}"
Скрипт оперирует относительными путями, что намекает, что скрипт рассчитывает быть вызванным из определенной директории. Каков будет багор, если в $PWD будет, скажем, /sys? Всё выглядит так, что текущая директория здесь используется как временная, так что можно было условиться использовать /tmp по её прямому назначению, тем самым оперировать абсолютными путями и избавиться от хаков с find / realpath и root's rm -rf safety
>chown root:root -vf "${F}"
>chmod -vf 644 "${F}"
А как такое может быть, что файл создался wget'ом с неправильными правами? Защита от предыдущего запуска скрипта от неверного пользователя?
>if [[ ${TMPDIR} == '.' || ${TMPDIR} == '..' || ${TMPDIR} == '/' ]]
Микродоёбка: можно избавиться от башизма, будет выглядеть чуть грязнее, но если на портабельность этого говна похуй, то и ладно
if [ "$TMP" = 'aaa' ] || [ "$TMP" = 'bbb' ] ... etc
Это плохо, да
>, так что можно было условиться использовать /tmp
``mktemp(1)``
>А как такое может быть, что файл создался wget'ом с неправильными правами?
``umask(2)``, ``apropos umask``
>>ожно избавиться от башизма, будет выглядеть чуть грязнее, но если на портабельность этого говна похуй,
Если на портабельность похуй, то зачем избавляться от башизма?:)
нет, не похуй
Второй умеет выпаршивать тугрики из строк, а первый использует его чтобы из стрима читать