qkowlew: На Зилантконе меня сфоткали мыльницей. Мыльницам не позирую! (Default)
qkowlew ([personal profile] qkowlew) wrote2017-02-01 03:03 am

Админам, пишущим на bash..

Прикол для очень внимательных и опытных писателей на bash.

Однажды отец Онуфрий опытный админ написал кусок кода, обходящий окрестности онежского дерево каталогов, и стал его применять везде где ни попадя:
SqTree(){
[ -z "${1}" ] && return
for i in *.html
 do
 [ -s "${i}" ] && (тут обработка строк файла, не важно какая)
 done
for i in *
 do
 [ -d "${i}" ] || continue
 cd "${i}"
 SqTree "${1}"
 cd ..
 done
}

Скажите, собратия по написанию скриптов на bash и многих других шеллах - чего не хватает конкретно в выделенной полужирным строке, и почему? :)

UPD 2017-02-01 15:53 : пока из 6 участвующих в о[б|]суждении обнаружил "самую интересную" ошибку только один (в ирц, не здесь). :)

UPD 2017-02-01 19:05 : чтобы избавить данный вопрос от претензии "почему не find" - та же самая "недостача" в такой же выделенной строке скрипта вида:
#!/bin/bash
# Show subdirectory listing
[ -z "$1" ] && return
[ -d "$1" ] || return
cd "$1"
ls
cd ..
filin: (Default)

[personal profile] filin 2017-02-01 11:09 am (UTC)(link)
Да. Два абзаца моего комментария - два разных утверждения, а не две части одного.

Строка "cd .." ничуть не менее чревата боком, чем cd без проверки успеха. И в ней проверка успеха не поможет.

Ну и там по вкусу есть таракан с тем, что в директории, начинающиеся с ., оно забудет сходить. В зависимости от того, что именно подразумевается тобой, это может быть как фичей, так и багом.