Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.
Модераторы: SLEDopit , Модераторы разделов
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo
Сообщение
Ленивая Бестолочь » 07.11.2008 11:07
к стыду ничего в нем не понимаю :-(
есть у нас один старый скрипт:
Код: Выделить всё
......
bp="/home/swift/arch/"ARGV[1]"/"
while("find "bp" -type d -maxdepth 1|sort -t/ +5"|getline){
.......
}
он прекрасно работает со старым гавком (debian 3.0)
а в новом похоже, что переменная bp не раскрывается, а вместо этого
команда
find "bp" -type d -maxdepth 1|sort -t/ +5
разбивается на несколько частей и выполняется отдельно, т.к. мы имеем ошибку:
sh: -type comand not found
если есть знающие awk люди - подскажите, пожалуйста - как поменять эту конструкцию на правильную.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
vr13
Сообщения: 887
ОС: gentoo
Сообщение
vr13 » 07.11.2008 21:09
у вас дело не в awk, а в sort. теперь констркуции +/- не поддерживаются по умолчанию, но заставить - можно
почитайте man
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo
Сообщение
Ленивая Бестолочь » 10.11.2008 10:31
к сожалению, если sort убрать то та же проблема :-)
вот собсно из тех же скриптов (их там много) аналогичная конструкция, но с "правильным" sort-ом:
Код: Выделить всё
manager4:/home/swift/cgi-bin# cat ./years
#!/usr/bin/awk -f
BEGIN{
print "Content-type: text/html; charset=koi8-r"
print ""
print "<BODY>"
print "<H1 ALIGN=\"CENTER\">Месяцы обмена сообщениями </H1> <P>"
print "<UL>"
bp="/home/swift/arch/"
while("find "bp" -maxdepth 2 -type d|sort -t/"|getline){
$0=substr($0,length(bp)+1)
if($0~/^$/)continue
if(length($0)<=3)print "<P><LI> Год "substr($0,1,2)"<P>"
else{
print "<A HREF=\"/cgi-swift/days?"$0"\""">"substr($0,4)"</A>"
}
}
print "</UL>"
print "</BODY>"
}
manager4:/home/swift/cgi-bin# ./years
Content-type: text/html; charset=koi8-r
<BODY>
<H1 ALIGN="CENTER">Месяцы обмена сообщениями </H1> <P>
<UL>
sh: -maxdepth: command not found
<тут висим и очень грузим процессор до бесконечности>
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
vr13
Сообщения: 887
ОС: gentoo
Сообщение
vr13 » 10.11.2008 13:54
на самом деле, я хотел сказать лишь то, что
Код: Выделить всё
gawk 'BEGIN { bp="./tmp"; while("find "bp" -maxdepth 1 -type d|sort -t/ +5"|getline) { print $1 } }'
завершится с ошибкой, а
Код: Выделить всё
_POSIX2_VERSION=1 gawk 'BEGIN { bp="./tmp"; while("find "bp" -maxdepth 1 -type d|sort -t/ +5"|getline) { print $1 } }'
проработает нормально
разумеется, полностью воспроизвести весь ваш пример я не могу
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo
Сообщение
Ленивая Бестолочь » 10.11.2008 15:41
ух ты.
это уже похоже на то, что мне нужно, спасибо :-)
правда к сожалению у меня оба примера не работают - оба входят в бесконечный цикл (похоже)
то бишь - черный экран, курсор внизу и т.п.
на всякий случай поменял "./tmp" на "/tmp", убрал "type d" - все то же самое.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.