Коллеги, моск мой зашел в тупик.Есть некий шелл-скрипт, в этом скрипте less передается некая переменная, содержащая пробелы.
Эта переменная - путь.
Если перед less поставить echo $string - он честно выводит путь:
/mnt/backup/VM/IPO_LIFE_DATE/31-08-2010/mnt/jaguar/Сенькова\ ТА/c5032fb5b0154f31b945ef828d0d2333.WAVсодержимое (а точнее - riff заголовок) файла, нужно передать другой переменной:
riff=`less $string | grep -v RIFF | grep -v WAVEfmt | grep -v ALCH | grep -v Avaya | grep -v data | grep -v fact | paste -s`И если в консоли сделать less этот пусть - честно откроет содержимое файла.
А если в скрипте, нет! Честно передается путь до первого пробела и обрезается.
Соотвтетственно пишет, что путь не найден :(Как сделать правильно, чтобы less честно и без изменений читал переменную?
Система Linux Mandriva 2010
less -V
less 436
Copyright (C) 1984-2009 Mark Nudelman
кавычки, двойные - "$string"а если вместо less использовать head/tail ?
> кавычки, двойные - "$string"
> а если вместо less использовать head/tail ?Ага! Точно! :)
Упростил скрипт, а то переменная на переменной.
Все дело в том, что почему-то именно в этом дистрибутиве и именно эта версия less просто так показывает riff заголовок :)==> append : to filename to view the RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 8000 Hz source
RIFFf
WAVEfmt
ALCH
Avaya
2500
2608
2608
fact
data@Почему, фиг знает.
Остается немного очистить от мусора - и вот тебе готовые данные.
Теперь попробую чистить мусор...
Как вывести less первые n строк?
>> кавычки, двойные - "$string"
>> а если вместо less использовать head/tail ?
>
> Как вывести less первые n строк?туплю... -N конечно же..
>> Как вывести less первые n строк?
> туплю... -N конечно же..Если я что-нибудь в чем-нибудь понимаю, то дыра - это нора... Э-э, прошу прощения, увлекся. :-)
В общем, опция -N утилиты less вроде как должна нумеровать выводимые строки, а не
ограничивать их количество...
>>> Как вывести less первые n строк?
>> туплю... -N конечно же..
> Если я что-нибудь в чем-нибудь понимаю, то дыра - это нора... Э-э,
> прошу прощения, увлекся. :-)
> В общем, опция -N утилиты less вроде как должна нумеровать выводимые строки,
> а не
> ограничивать их количество...А если я еще что-то понимаю в less, то она, как и find сильно зависит от версии дистрибутива :)))
В любом, случае, обошелся более изящным решением.
Теперь вот понять бы, почему (?) less в мандриве довольно-таки сносно выводит riff заголовок из wav файла, а вот, к примеру, тот же центос или альт линукс воспринимает файл, как двоичный (в общем-то, правильно воспринимает) и выводит абракадабру:
RIFF6b ^@WAVEfmt ^P^@^@^@^A^@^A^@@^_^@^@<80>>^@^@^B^@^P^@ALCH<EE>^@^@^@Avaya^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@4959561512^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@<BD>c<9D><CE>^@^@2552^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@2002^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@<CF><F3><EB><FC> <C4><CC><D1>^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@fact^D^@
^@^@^Pa ^@data^Pa ^@^@^C<A0>^B
ну и так далее.Что такого "подкрутили" французы, интересно? :)
>[оверквотинг удален]
>>> туплю... -N конечно же..
>> Если я что-нибудь в чем-нибудь понимаю, то дыра - это нора... Э-э,
> А если я еще что-то понимаю в less, то она, как и
> find сильно зависит от версии дистрибутива :)))
> В любом, случае, обошелся более изящным решением.
> Теперь вот понять бы, почему (?) less в мандриве довольно-таки сносно выводит
> riff заголовок из wav файла, а вот, к примеру, тот же
> центос или альт линукс воспринимает файл, как двоичный (в общем-то, правильно
> воспринимает) и выводит абракадабру:
> Что такого "подкрутили" французы, интересно? :)Не знаю, честное слово, не знаю. :-)
Да какая, в сущности, разница, что "подкрутили" и кто - французы, бразильцы или граждане Непала,
зачатые непальцем и непалкой? :-) В обязанности less входит постраничный вывод текстовой
информации на экран и не более. Чем пытаться понять, почему оно себя так ведет в Мандриве, на
мой сугубо личный взгляд, стоило бы подыскать инструмент, более соответствующий задаче.Я, например, поискал в том же Гугле по запросу "linux wav riff dump" и в результатах поиска
нашел утилитку под названием T@b Riff Dump. Вот образец ее работы:$ ./tabriffdump ~/Documents/xine-out.wavfmt
====
structure size=18 (0x00000012)
wFormatTag=1 (0x00000001)
nChannels=2 (0x00000002)
nSamplesPerSec=32000 (0x00007d00)
nAvgBytesPerSec=128000 (0x0001f400)
nBlockAlign=4 (0x00000004)
wBitsPerSample=16 (0x00000010)
cbSize=0 (0x00000000)
RIFF size=857124
WAVE
fmt size=16
data size=857088Гляньте, пожалуйста, не то ли это, что Вам нужно?
>[оверквотинг удален]
> nAvgBytesPerSec=128000 (0x0001f400)
> nBlockAlign=4 (0x00000004)
> wBitsPerSample=16 (0x00000010)
> cbSize=0 (0x00000000)
> RIFF size=857124
> WAVE
> fmt size=16
> data size=857088
>
Да, я и эту улиту смотрел и какой-то страшный скрипт на питоне и еще много чего еще.. Но мне нужно именно содержимое RIFF заголовка, а все эти утилиты показывают просто информацию о нем :(
Но, тем не менее, я добился своей цели, спасибо! Скрипт работает 7 часов, но его нужно запускать разово для первичного наполнения (или восстановления в случае косяков) базы.
Потом достаточно парсить суточные записи.
Спасибо Вам огромное!
>> кавычки, двойные - "$string"
>> а если вместо less использовать head/tail ?
> Ага! Точно! :)
> Упростил скрипт, а то переменная на переменной.
> Все дело в том, что почему-то именно в этом дистрибутиве и именно
> эта версия less просто так показывает riff заголовок :)я думаю, это не сам less, а lessopen.sh
>>> кавычки, двойные - "$string"
>>> а если вместо less использовать head/tail ?
>> Ага! Точно! :)
>> Упростил скрипт, а то переменная на переменной.
>> Все дело в том, что почему-то именно в этом дистрибутиве и именно
>> эта версия less просто так показывает riff заголовок :)
> я думаю, это не сам less, а lessopen.shДа, я тоже уже понял, теперь осталось понять, как прикрутить все это в другой дистрибутив :)
>>>> кавычки, двойные - "$string"
>>>> а если вместо less использовать head/tail ?
>>> Ага! Точно! :)
>>> Упростил скрипт, а то переменная на переменной.
>>> Все дело в том, что почему-то именно в этом дистрибутиве и именно
>>> эта версия less просто так показывает riff заголовок :)
>> я думаю, это не сам less, а lessopen.sh
> Да, я тоже уже понял, теперь осталось понять, как прикрутить все это
> в другой дистрибутив :)Все, разобрался :)
> Все, разобрался :)Тогда, пожалуйста, опишите здесь найденное решение, чтобы облегчить жизнь тем, кто
столкнется с подобной проблемой в будущем. :-)
>> Все, разобрался :)
> Тогда, пожалуйста, опишите здесь найденное решение, чтобы облегчить жизнь тем, кто
> столкнется с подобной проблемой в будущем. :-)Вы знаете, если честно, то я не думаю, что кто-то еще будет так, извините, через попу сапоги надевать, как мне понадобилось.
Очень уж узкоспецифичная вещь...
Еще, из соображений эффективности, чем вызывать несколько грепов (это накладно), проще сделать сложный шаблон поиска. Сравните:> grep -v RIFF | grep -v WAVEfmt grep -v ALCH | grep -v Avaya | grep -v data | grep -v fact
> grep -v "RIFF|WAVEfmt|ALCH|Avaya|data|fact"
> Еще, из соображений эффективности, чем вызывать несколько грепов (это накладно), проще
> сделать сложный шаблон поиска. Сравните:
>> grep -v RIFF | grep -v WAVEfmt grep -v ALCH | grep -v Avaya | grep -v data | grep -v fact
>> grep -v "RIFF|WAVEfmt|ALCH|Avaya|data|fact"Согласен!
Скрипт в принципе очень сырой еще - нужно было срочно.
Теперь, как всегда, буду долизывать и оптимизировать.
Спасибо за предложение!