LINUX.ORG.RU

osh — объектная оболочка

 ,


0

0

Object Shell (osh) — это инструмент, объединяющий в себе обработку структурированных данных, доступ к базам данных, файлам, процессам и удаленный доступ к кластерам. Эти возможности доступны посредством интерфейса командной строки и интерфейсу программирования на Python. Osh обрабатывает потоки объектов Python, используя простые команды. Обработка сложных данных осуществляется при помощи последовательности команд, в которых вывод одной команды присоединен ко вводу следующей. Это напоминает конвееры Unix, но не ограничивается передачей текстовых строк.

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

Из новых команд: ls генерирует поток объектов File. ps генерирует поток объектов Process. merge объединяет упорядоченные потоки объектов из разных потоков выполнения, затрачивая обычно меньше памяти и времени, чем при обычной сортировке.

>>> Подробности

★★★★★

Проверено: Shaman007 ()

Tcl Shell (tclsh) — это инструмент, объединяющий в себе обработку структурированных данных, построение графических интерфейсов, доступ к базам данных, файлам, процессам и удаленный доступ к кластерам. Эти возможности доступны посредством интерфейса командной строки и интерфейсу программирования на Tcl. Tclsh обрабатывает команды Tcl, используя простые команды. Обработка сложных данных осуществляется при помощи последовательности команд.

В вашем дистрибутиве появился уже позавчера или ранее :)

gaa ★★
()
Ответ на: комментарий от Deleted

>Вот например подскажите как можно распарсить в shell-скрипте вывод ls -l, разложив по разным местам всю информацию которая выдаётся.

Что значит "разложив по разным местам всю информацию которая выдаётся"? Задачу можете четко сформулировать? Что скрипт делать должен?

A-234 ★★★★★
()
Ответ на: комментарий от tailgunner

> <flame>Tcl не нужен, это доказано его 20-летней историей</flame>

<noflame>Во всём важна стабильность!</noflame> :)

gaa ★★
()
Ответ на: комментарий от Joe_Bishop

>парсить ls -l не нужно ровно до тех пор, пока есть stat.

Если я правильно понял постановку вопроса товарищ хотел разделить вывод информации в несколько файлов. Например имя и дату в один файл а размер и имя в другой. Тогда парсить надо чтобы не вызывать ls или stat несколько раз. Для этого можно воспользоваться awk, вернее man awk в данном случае :)

P.S. И man bash заодно.

A-234 ★★★★★
()
Ответ на: комментарий от Deleted

>это невозможно.

если подумать - возможно всё

даже если awk не канает (ls -l | awk '{print $3}')

------8<------
#!/bin/sh

processRecord(){
#most of the following has no sense
#I put those for demo only (gsub line removed whitespaces)
processedLine=`echo "$@" |
awk '{gsub(/^[ \t]+|[ \t]+$/,"");print}' |
#grep vasya |
awk '{print $1 $3 $5}' |
tr 'A-Z' 'a-z' |
tr '+' '-' |
sed -e 's/^d/direktoriya/'`

echo ">>>${processedLine}"
}


ls -l |
while read line
do
echo ${line}
processRecord "$line"
done
------8<------

anonymous
()
Ответ на: комментарий от A-234

> Например имя и дату в один файл а размер и имя в другой.

как джойнить потом?
лучше сохранять tuples

> И man bash заодно.


иногда бывает неправославно


P.S.
по топику: Пастернака не читали, но осуждаем

anonymous
()
Ответ на: комментарий от anonymous

ещё есть cut
(man cut)

после удаления конкатенирования спейсов - можно использовать

гугли/яхи по "awk one-liner", "sed one-liner"


anonymous
()
Ответ на: комментарий от A-234

можно в скрипте по кондишену делать разные фильтры и класть рекорды (но - с номером! - ключ для последующего джойна) в разные файлы

я видел мужики чудеса творят - переливают данные, делают запросы борном - как на SQLe, организуя временные таблицы
Но таких сейчас мало :(

anonymous
()
Ответ на: комментарий от tailgunner

> Tcl не нужен

Tcl нужен и ещё как!

работает как часики и под виндами (зараппленный в tclkit),
виндузоиды счастливы и не знают что это - графический враппер над православной UNIX-way-прогой берущей всё через посикс-аргументы.

anonymous
()

обьекты (ОО программирование) - вещь хорошая, но позволили менагерам считать что они люди (и даже называющих себя зачастую архитекторами, марая на UMLи) и угнетать свободных программистов, выражая бизнес-логику в привычным им понятиях. Это всё равно - что сказать что дата-модель должна один-к-одному быть переведена в таблицы (имплементацию).
А задача должна программироваться снизу - исходя из эффективности (потоков данных, их обработки).

anonymous
()
Ответ на: комментарий от Deleted

2 mironov_ivan

по следующему линку - небольшая скриптовая (на борне, только юнит-тест на баше) аппликация откуда я обычно копирую usage, когда надо чё-то быстро сварганить, и/или которую использую как скелет (там посикс аргументы, разные фильтры, подстановки, манипуляции стрингами и пр - почти все конструкции которые могут понадобится для чего-то простого).

Посмотри - если интересно:

http://sourceforge.net/project/showfiles.php?group_id=124759&package_id=1...

anonymous
()
Ответ на: комментарий от Deleted

Итак, выше кто-то посоветовал на каждый файл вызывать в цикле stat. А теперь подумайте, насколько больше процессорного времени будет тратиться на постоянное дёрганье stat по сравнению с одним вызовом ls, который поидее выдаёт всю нужную информацию?

Другие посоветовали sed, awk, cut, man bash и прочее прочее... Да я знаю я и про маны и про sed'ы. Народ, вы попробуйте посмотреть что выдаёт ls -l, включить мозг, и затем ещё раз подумать - что может выдавать ls -l в различных ситуациях? 100% парсеров загнутся вот на такой строке в выводе ls -l:

-rw-r--r-- 1 ivan some group 0 Окт 31 07:36 some file

Deleted
()
Ответ на: комментарий от anonymous

>> Нет, неправильно. Они были еще до Monad Shell, как звался PowerShell в девичестве. Если кто-то у кого-то и взял идею, так это наоборот.

Ясно, будем знать...

Deleted
()

ОСэХа не нужен.
Когда 30 лет назад речь шла о передаче текстовых потоков по пайпам, было понятно, что это будет тривиальщина типа ls | grep porno. Если же посмотреть на современное разнообразие объектов системы + куча мультимедийных форматов, понятно, что никому нафик не упёрлись потоки музыки, перемешанные с записями СУБД. Каждый тип объектов требует своей специфичной обработки, а тут уже неважно наличие пайпов - программа просто расширяется функционалом и делает своё узкое дело.
Короче, очередная _программерская_ перделка.

matumba ★★★★★
()

> osh — объектная оболочка

osh не объектная: она не умеет создавать новые объекты. штуки, с которыми она работает это потоки кортежей. на самом деле, модель данных в osh больше напоминает реляционную. (osh умеет пихать объекты внутрь кортежей, собственно и все).

osh не оболочка: у неё нет интерактивного режима. упомянутый cli это на самом деле лишь cli. ни кто же не называет оболочками grep там или awk . если очень нужен красивый эпитет, osh лучше было обозвать монадой.

остальное, похоже на правду. :)

Lucky ★★
()
Ответ на: комментарий от alex4

> не помнишь что именно Реймонд писал про двоичные форматы, быдло?

Я помню что башорг писал про <pixel><red>10</red><blue>20</blue><green>30</green><alpha>255</alpha></pixel>.

Но речь _совершенно_ не о двоичных форматах, а о том, что если у нас будет не один поток байт^W текста, а поток с метаданными (xattrs и не только), т.е. текст, а на нем меточка «text/plain», меточка «UTF-8» (а не enca трахает себе мозг по статистике и кофейной гуще) и еще всякие разные меточки то это будет только выигрыш.

Да, сложнее — не плоский поток, а несколько сразу. Но при этом оно обратно совместимо и дает очень серьезные выигрыши.

anonymous
()
Ответ на: комментарий от matumba

> понятно, что никому нафик не упёрлись потоки музыки, перемешанные с записями СУБД

То-то каждый чертов плеер кроме, разве что, mplayer да aplay, тянет в себе свою СУБД.

> Каждый тип объектов требует своей специфичной обработки

Правда, но не до конца. Проблема в том, что в типе объектов «музыкальный файл» есть OGG, есть FLAC, есть MP3 и есть еще свыше 9000 разных подтипов.

А пользователя не должно волновать это, он хочет вот эти два альбома обработать, а не вспоминать в каких оно форматах, чтобы выдирать из каждого теги и вызывать конверторы для каждого своим путем.

Объектные шеллы, за счет того что FLAC и OGG будут иметь разумно одинаковые свойства это упрощают.

anonymous
()
Ответ на: комментарий от anonymous

> Объектные шеллы, за счет того что FLAC и OGG будут иметь разумно одинаковые свойства это упрощают.

А кто будет обучать этот шелл способам получения "разумно одинаковых свойств" из файлов разных типов?

anonymous
()
Ответ на: комментарий от anonymous

>Вот есть у нас ImageMagick, есть convert(1), и он тратит кучи времени на то, чтобы просто понять что же ему за поток байтов пришел на STDIN, если он с него читает, а не из файла. Вместо того, чтобы получить объект, который имеет содержимое, имеет MIME-тип и т.д..

угу.

1) ключик программе нельзя передать?

2) верифицировать все равно придется. Мало ли что там в миме-типе передано, а чтов реальности.

Самое главное, все шеловые штучки хорошо работают в простых случаях. А в сложных надо использовать тот же питон.

AVL2 ★★★★★
()
Ответ на: комментарий от anonymous

> А кто будет обучать этот шелл способам получения "разумно одинаковых свойств" из файлов разных типов?

А шелл отойдет на второй план, это все логично сдвигать на уровень VFS даже. А шелл просто позволит «человеческим языком» говорить машине чего человеку хочется получить.

Вытаскивать данные будут т.н. transducers, преобразованием могут заниматься type converters. Эти концепции были предложены в файловой системе LFS (<http://aryx.kicks-ass.org/~pad/wiki/wiki-LFS/doku.php?id=start>;) и в ящиках Plan B (<http://lsub.org/ls/export/2kblocks/node5.html>;).

anonymous
()
Ответ на: комментарий от AVL2

> 1) ключик программе нельзя передать?

Зачем? Поймите, людей, желающих, скажем, сгенерить дискографию, не интересует лежит ли у них альбом в OGG, FLAC или MP3. Они знают что у них лежит музыка и, разумно, что имеют полное право пользоваться для них единой семантикой.

Согласитесь, концепция типизированного файла (она никак не нарушает метод KISS, наоборот, способствует ему — убирает гадалки на байтах) это куда красивее автоматических обнаружителей по сигнатурам и куда удобнее ручного указания опций.

> Мало ли что там в миме-типе передано, а чтов реальности.

Ну, суду я как image/png HTML-документ. Ну заметит читалка что там чушь и даже заголовок неправильный. Ну и выругается и выйдет с ошибкой, как и положено. А то, что неправильный тип указан — пользователь сам дурак, пусть теперь разбирается и указывает правильный.

Сейчас в GNU/Linux, к слову, все _то же самое_, только по старой-старой концепции «расширений» файлов. Ну, сделаю я mv index.html photo.jpeg и получу то же самое кино.

anonymous
()
Ответ на: комментарий от anonymous

>Ebash! полностью соответствует философии и духу UNIX - "пиши жирный монолитный софт назначение которого никому не понятно" и "ООП - технология будущего, решающая все проблемы".

жжошь! :)

black7
()
Ответ на: комментарий от Deleted

>как можно распарсить в shell-скрипте вывод ls -l, разложив по разным местам всю информацию которая выдаётся.

ну как, grep, awk, perl

>Hint: это невозможно.

ага. "этого не может быть потому что не может быть никогда?". пойди убейся о винфак

black7
()
Ответ на: комментарий от Deleted

>на каждый файл вызывать в цикле stat. ... Народ, вы попробуйте посмотреть что выдаёт ls -l,

данная задача на перле решается однострочником

black7
()
Ответ на: комментарий от black7

>> данная задача на перле решается однострочником

Вот никогда не мог понять: вас где таких идиотов клонируют?

Я изменю своё мнение о тебе, если ты напишешь программу, которая смжет распарсить вот это:

>> -rw-r--r-- 1 ivan some group 0 Окт 31 07:36 some file


Hint #2: Подумай где там ещё может *внезапно* появиться пробел.
Hint #3: На самом деле в мире существует туева хуча разных локалей.
Hint #4: Строка в выводе ls -l может быть всего одна.

Deleted
()
Ответ на: комментарий от Deleted

> Вот никогда не мог понять: вас где таких идиотов клонируют?

прежде чем обзывать идиотами других - задумайся: а не выглядишь ли ты здесь идиотом?
А клонируют вас на винфаке, мы знаем.

А теперь в 10-й раз подумай - почему не может быть пробелов в юзере и в группе. Хинт: имя файла - последние токены, и если тебе надо имя файла (заметь - с любым количеством пробелов):

ls -l | awk '{for (i=9; i<=NF; i++) printf("%s ",$i);printf ("\n")}'

anonymous
()
Ответ на: комментарий от anonymous

а перл (создававшийся как парсилка логов) - ещё удобнее,
правда скрипты - ортодокс^Щправославнее

anonymous
()
Ответ на: комментарий от anonymous

>> А теперь в 10-й раз подумай - почему не может быть пробелов в юзере и в группе.

Если пробела в названии группы быть не может, то откуда он у меня в выводе ls -l появился? О_О

А может быть меня и моего компьютера вообще не существует потому что существовать не может?

// mironov_ivan, нет возможности залогиниться

anonymous
()
Ответ на: комментарий от Deleted

>> -rw-r--r-- 1 ivan some group 0 Окт 31 07:36 some file

> Hint #2: Подумай где там ещё может *внезапно* появиться пробел.

> Hint #3: На самом деле в мире существует туева хуча разных локалей.

> Hint #4: Строка в выводе ls -l может быть всего одна.


man ls

(прежде чем публично демонстрировать здесь свою необразованность)

Led ★★★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.