Объявление

Односложные и бессмысленные темы, не несущие полезную нагрузку или не содержащие в себе вопрос, будут удаляться!

#1 02-07-11 17:43:24

Babusha
Нехристь
Здесь с 12-03-10
Сообщений: 2,221
Windows 7Firefox 5.0

Помогите разобраться с одной проблемой, в баше

Значит так, захотелось мне написать нормальную привязку find к ruby, где не будет бага с символом "\n", в чем смысл идеи, делаем однострочник в баше такой, что бы он печатал имена файлов в массив т.е

files[0] = '.'; files[1] = './.git'; files[2] = './.git/COMMIT_EDITMSG'; files[3] = './.git/config';

А потом из руби его eval'им
Попробовал сделать вот так:

index=0; find #{arguments} -exec echo -n "files[$index] = {}"\; index=$((index + 1))\;

Проблема в том, что, он только после того, как выполняет echo (!) для абсолютно всех файлов, только тогда выполняет index=$((index + 1))\;

Т.е сначала печатает весь массив, каждый елемент которого с индексом 0 (ноль)

files[0] = '.'; files[0] = './.git'; files[0] = './.git/COMMIT_EDITMSG'; files[0] = './.git/config';

Что делать -- не имею представления, прошу местный людей прояснить мне ситуацию.

Кстати, да, собирался делать как-то так:

class File
        def find(arguments = '')
                files = Array.new
                eval(%x[index=0; find #{arguments} -exec echo -n "files[$index] = {}"\; index=$((index + 1))\;].chomp())
        end
end

Отредактировано Babusha (02-07-11 17:52:09)


Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю.  (с) Рехтур. Взламывает анусы по ойпи.

Вне форума

#2 02-07-11 18:24:53

Linups_Troolvalds
С нами Баг!
Откуда: Отовсюду
Здесь с 06-10-09
Сообщений: 2,100
LinuxChrome 14.0

Re: Помогите разобраться с одной проблемой, в баше

Babusha пишет:

Значит так, захотелось мне написать нормальную привязку find к ruby

Это просто прекрасно.

Babusha пишет:

Что делать -- не имею представления, прошу местный людей прояснить мне ситуацию.

Да просто всё.

files=($(find <...>))
index=${#files[@]}

Отредактировано Linups_Troolvalds (02-07-11 18:25:02)


.:``́3̶E̶P̶O̶W̶h̶`́`:.

Вне форума

#3 02-07-11 18:33:40

Babusha
Нехристь
Здесь с 12-03-10
Сообщений: 2,221
Windows 7Firefox 5.0

Re: Помогите разобраться с одной проблемой, в баше

Linups_Troolvalds пишет:

Да просто всё.

Да мне не башевский массив нужен, мне нужно что бы печатался массив с синтаксисом руби, а уже из руби я бы его eval`ил. Кстати, да, насчет примеру твоего, если будет в имени файла пробел или символ "\n" то будет ошибка.

Отредактировано Babusha (02-07-11 18:38:03)


Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю.  (с) Рехтур. Взламывает анусы по ойпи.

Вне форума

#4 02-07-11 19:31:14

MOP3E
Участник
Здесь с 05-10-09
Сообщений: 4,208
Windows 7Firefox 3.6

Re: Помогите разобраться с одной проблемой, в баше

Babusha пишет:

Да мне не башевский массив нужен, мне нужно что бы печатался массив с синтаксисом руби, а уже из руби я бы его eval`ил. Кстати, да, насчет примеру твоего, если будет в имени файла пробел или символ "\n" то будет ошибка.

А что мешает сначала записать результат в строковую переменную, а потом удалить из него "лишние" символы?


Я не игрушечный. Я, б*я, коллекционный! (с) Duke Nukem Forever
Я не специалист по [вставить название]. Мне главное концептуально решить задачу! (с) АхаRu.
Линукс - это альтернативная ОС о которой известно, что она не является ОС ну вот просто ни разу. (с) Linups_Troolvalds.
А с какого такого перепугу пользователей линукса должно быть больше 1%? (с) petrun

Вне форума

#5 02-07-11 19:34:57

Babusha
Нехристь
Здесь с 12-03-10
Сообщений: 2,221
Windows 7Firefox 5.0

Re: Помогите разобраться с одной проблемой, в баше

MOP3E пишет:

А что мешает сначала записать результат в строковую переменную, а потом удалить из него "лишние" символы?

А в том, что если имя файла будет hello\naabbbcc то тогда ничего не получиться.


Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю.  (с) Рехтур. Взламывает анусы по ойпи.

Вне форума

#6 02-07-11 19:42:39

Linups_Troolvalds
С нами Баг!
Откуда: Отовсюду
Здесь с 06-10-09
Сообщений: 2,100
LinuxChrome 14.0

Re: Помогите разобраться с одной проблемой, в баше

Babusha пишет:

А в том, что если имя файла будет hello\naabbbcc то тогда ничего не получиться.

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

Отредактировано Linups_Troolvalds (02-07-11 20:00:29)


.:``́3̶E̶P̶O̶W̶h̶`́`:.

Вне форума

#7 02-07-11 19:52:52

MOP3E
Участник
Здесь с 05-10-09
Сообщений: 4,208
Windows 7Firefox 3.6

Re: Помогите разобраться с одной проблемой, в баше

Babusha пишет:

А в том, что если имя файла будет hello\naabbbcc то тогда ничего не получиться.

Не понял проблемы, если честно. Ты берёшь "сырую" строку, с "неправильными" символами и исправляешь так, чтобы она могла лечь в твой массив. Заменяешь или удаляешь "неправильные" символы - и потом уже парсишь. Банальная обработка входных данных.


Я не игрушечный. Я, б*я, коллекционный! (с) Duke Nukem Forever
Я не специалист по [вставить название]. Мне главное концептуально решить задачу! (с) АхаRu.
Линукс - это альтернативная ОС о которой известно, что она не является ОС ну вот просто ни разу. (с) Linups_Troolvalds.
А с какого такого перепугу пользователей линукса должно быть больше 1%? (с) petrun

Вне форума

#8 02-07-11 19:58:39

Babusha
Нехристь
Здесь с 12-03-10
Сообщений: 2,221
Windows 7Firefox 5.0

Re: Помогите разобраться с одной проблемой, в баше

Linups_Troolvalds пишет:

Вообще, это как бы ненормальное имя файла. Так что правильным вариантом будет сначала переименовать все такие файлы, чтобы не мучаться.

Ты это скажи файловой системе.

Linups_Troolvalds пишет:

Но можно и такие обработать, угадайте, как.

find -print0 | xargs ?

MOP3E пишет:

Не понял проблемы, если честно. Ты берёшь "сырую" строку, с "неправильными" символами и исправляешь так, чтобы она могла лечь в твой массив. Заменяешь или удаляешь "неправильные" символы - и потом уже парсишь.

Да нахер мне нужен башевский массив? Мне нужно что-бы сформировать из вывода find массив синтаксиса руби, зачем мне башевский массив?


Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю.  (с) Рехтур. Взламывает анусы по ойпи.

Вне форума

#9 02-07-11 20:01:33

Linups_Troolvalds
С нами Баг!
Откуда: Отовсюду
Здесь с 06-10-09
Сообщений: 2,100
LinuxChrome 14.0

Re: Помогите разобраться с одной проблемой, в баше

Babusha пишет:

Ты это скажи файловой системе.

Файловая система не отвечает за кривые руки допущенного к консоли пользователя.

Babusha пишет:

find -print0 | xargs ?

Куда проще.

files_inodes=($(find <что-то-там> -printf "%i "))

Вы же не станете утверждать, что в inode будут недопустимые символы? Нет. Всё, можете делать с ними что угодно.


.:``́3̶E̶P̶O̶W̶h̶`́`:.

Вне форума

#10 02-07-11 20:01:46

MOP3E
Участник
Здесь с 05-10-09
Сообщений: 4,208
Windows 7Firefox 3.6

Re: Помогите разобраться с одной проблемой, в баше

Babusha пишет:

Да нахер мне нужен башевский массив? Мне нужно что-бы сформировать из вывода find массив синтаксиса руби, зачем мне башевский массив?

Если нет гербовой бумаги - пишем на простой. Если баш не умеет формировать массив в формате руби - остаётся только предварительная обработка массива баша средствами руби. И вообще - вам шашечки или ехать?


Я не игрушечный. Я, б*я, коллекционный! (с) Duke Nukem Forever
Я не специалист по [вставить название]. Мне главное концептуально решить задачу! (с) АхаRu.
Линукс - это альтернативная ОС о которой известно, что она не является ОС ну вот просто ни разу. (с) Linups_Troolvalds.
А с какого такого перепугу пользователей линукса должно быть больше 1%? (с) petrun

Вне форума

#11 02-07-11 20:03:43

Babusha
Нехристь
Здесь с 12-03-10
Сообщений: 2,221
Windows 7Firefox 5.0

Re: Помогите разобраться с одной проблемой, в баше

Linups_Troolvalds пишет:

Вы же не станете утверждать, что в inode будут недопустимые символы? Нет. Всё, можете делать с ними что угодно.

Если так, а точно не будет проблем с кривыми символами в именах?

UPD

Черт, так не подходит, есть нормальное решение?

Отредактировано Babusha (02-07-11 20:05:27)


Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю.  (с) Рехтур. Взламывает анусы по ойпи.

Вне форума

#12 02-07-11 20:13:02

Linups_Troolvalds
С нами Баг!
Откуда: Отовсюду
Здесь с 06-10-09
Сообщений: 2,100
LinuxChrome 14.0

Re: Помогите разобраться с одной проблемой, в баше

Babusha пишет:

Черт, так не подходит, есть нормальное решение?

Нормальным решением является переименование всех таких файлов. Это делается быстро и один раз.
Способ с инодами позволяет обрабатывать файлы с любыми именами. Да, он такой же нестандартный, как и имена файлов с спецсимволами.

И мне пока что непонятна постановка всей задачи. Заполнить массив путями к файлам – ясно, а дальше-то что надо? Зачем из bash передавать массив в ruby?


.:``́3̶E̶P̶O̶W̶h̶`́`:.

Вне форума

#13 02-07-11 20:18:40

Babusha
Нехристь
Здесь с 12-03-10
Сообщений: 2,221
Windows 7Firefox 5.0

Re: Помогите разобраться с одной проблемой, в баше

Linups_Troolvalds пишет:

Зачем из bash передавать массив в ruby?

Что бы использовать его в Ruby, всегда ваш К.О.


Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю.  (с) Рехтур. Взламывает анусы по ойпи.

Вне форума

#14 02-07-11 20:21:41

Linups_Troolvalds
С нами Баг!
Откуда: Отовсюду
Здесь с 06-10-09
Сообщений: 2,100
LinuxChrome 14.0

Re: Помогите разобраться с одной проблемой, в баше

Babusha пишет:

Что бы использовать его в Ruby, всегда ваш К.О.

А почему в руби не обработать вывод команды find?


.:``́3̶E̶P̶O̶W̶h̶`́`:.

Вне форума

#15 02-07-11 20:28:01

Babusha
Нехристь
Здесь с 12-03-10
Сообщений: 2,221
Windows 7Firefox 5.0

Re: Помогите разобраться с одной проблемой, в баше

Linups_Troolvalds пишет:

А почему в руби не обработать вывод команды find?

Можно, конечно %x[find].split("\n")
Но тогда будут глюки со спец символами.


Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю.  (с) Рехтур. Взламывает анусы по ойпи.

Вне форума

#16 02-07-11 20:30:45

Linups_Troolvalds
С нами Баг!
Откуда: Отовсюду
Здесь с 06-10-09
Сообщений: 2,100
LinuxChrome 14.0

Re: Помогите разобраться с одной проблемой, в баше

Babusha пишет:

Можно, конечно %x[find].split("\n")
Но тогда будут глюки со спец символами.

Если у нас каждое имя заканчивается '\0', было бы странно резать по '\n', да.


.:``́3̶E̶P̶O̶W̶h̶`́`:.

Вне форума

#17 02-07-11 20:30:49

Babusha
Нехристь
Здесь с 12-03-10
Сообщений: 2,221
Windows 7Firefox 5.0

Re: Помогите разобраться с одной проблемой, в баше

Linups_Troolvalds, ну так ты можешь мне сказать, как через find и параметр -exec реализовать вывод типа:

files[0] = '.'; files[1] = './.git'; files[2] = './.git/COMMIT_EDITMSG'; files[3] = './.git/config';

Ну как, скажи?

Добавлено спустя 02 мин 34 с:

Babusha пишет:

Если у нас каждое имя заканчивается '\0', было бы странно резать по '\n', да.

А если в имени файла будет "\0" ?


Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю.  (с) Рехтур. Взламывает анусы по ойпи.

Вне форума

#18 02-07-11 20:39:39

Linups_Troolvalds
С нами Баг!
Откуда: Отовсюду
Здесь с 06-10-09
Сообщений: 2,100
LinuxChrome 14.0

Re: Помогите разобраться с одной проблемой, в баше

Babusha пишет:

ну так ты можешь мне сказать, как через find и параметр -exec реализовать вывод типа:

Как-то так:

find <...> -print0 | xargs -0 sh -c 'l=$#;for ((i=0;i<l;i++));do echo -e "files[$i]=\x27$1\x27;";shift;done'

Только мне постановка задачи всё равно не нравится.


.:``́3̶E̶P̶O̶W̶h̶`́`:.

Вне форума

#19 02-07-11 20:41:22

Mazzy
Посетитель зоопарка
Здесь с 06-05-10
Сообщений: 992
LinuxFirefox 4.0

Re: Помогите разобраться с одной проблемой, в баше

Babusha, ну в самом деле-то!

Babusha пишет:

в имени файла будет "\0"

Babusha пишет:

hello\naabbbcc

Вы таких файлов много видели?

Вне форума

#20 02-07-11 22:14:52

Babusha
Нехристь
Здесь с 12-03-10
Сообщений: 2,221
Windows 7Firefox 5.0

Re: Помогите разобраться с одной проблемой, в баше

Mazzy пишет:

Вы таких файлов много видели?

Это же юнипс, тут все бывает.

Linups_Troolvalds пишет:

Только мне постановка задачи всё равно не нравится.

Я кстати твой код разобрать не могу, вот блин, если бы еще выводилось как files[$index] = "path"; files[$index] = "path2"; в одну строку, да и еще какае-то странная особенность, почему-то счетчик index обнуляется и весь index начинает считать с самого начала, WTF?.
1309630482-clip-174kb.png

Отредактировано Babusha (02-07-11 22:15:51)


Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю.  (с) Рехтур. Взламывает анусы по ойпи.

Вне форума

#21 03-07-11 01:02:02

Linups_Troolvalds
С нами Баг!
Откуда: Отовсюду
Здесь с 06-10-09
Сообщений: 2,100
LinuxChrome 14.0

Re: Помогите разобраться с одной проблемой, в баше

Babusha пишет:

в одну строку

Это фигня, echo -en

Babusha пишет:

почему-то счетчик index обнуляется и весь index начинает считать с самого начала, WTF?

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

files=%x[find <...> -print0]

и последующие действия с

files.split("\0")

вполне спасут отца русской демократии. Про \0 в именах файлов не надо сочинять, это слишком толсто будет, да и можете себе придумать любой разделитель в find хотя бы (-printf'ом), а потом ловить его с помощью руби.

Отредактировано Linups_Troolvalds (03-07-11 01:22:53)


.:``́3̶E̶P̶O̶W̶h̶`́`:.

Вне форума

#22 03-07-11 04:48:06

Майор Очевидность
борец со справедливостью
Здесь с 28-10-09
Сообщений: 1,371
LinuxChrome 12.0

Re: Помогите разобраться с одной проблемой, в баше

MOP3E пишет:

И вообще - вам шашечки или ехать?

вот уж никогда бы не подумал, что соглашусь со, скажем так, противником по убеждениям (хе-хе), однако здесь поставлю жирный +1.
пока что, на мой взгляд, Babusha не мытьём так кáтаньем пытается показать несостоятельность Bourne Again SHell. и намеренно ставит задачу не до конца, дабы иметь возможность заявить впоследствии, что шелл не смог прочесть его мысли.


all your post are belong to us.

Вне форума

#23 03-07-11 05:04:02

Linups_Troolvalds
С нами Баг!
Откуда: Отовсюду
Здесь с 06-10-09
Сообщений: 2,100
LinuxChrome 14.0

Re: Помогите разобраться с одной проблемой, в баше

Майор Очевидность пишет:

пока что, на мой взгляд, Babusha не мытьём так кáтаньем пытается показать несостоятельность Bourne Again SHell

ЛОР-врачи уже давно поставили диагноз. И, кстати, уже и в null-terminated строки мордочкой потыкали. Я, честно говоря, не понимаю, зачем здесь повторять то же самое. Ведь можно было просто вставить ссылку на свои художества.


.:``́3̶E̶P̶O̶W̶h̶`́`:.

Вне форума

#24 02-06-12 11:38:20

fooser
Участник
Здесь с 02-06-12
Сообщений: 639
LinuxIceweasel 9.0

Re: Помогите разобраться с одной проблемой, в баше

Babusha, я все же не понимаю зачем нужен такой неочевидный способ передачи данных, через eval? Это ведь небезопасно. Разве рубик не дает скриптам параметры своего запуска? По идее должен, следовательно куда уж проще было бы сделать нечто вроде ./имяскрипта --parameter1 value1 --parameter2 value2 и так далее. И тогда проблемы с кривыми символами ушли бы сами собой. Просто ваш изначальный подход is broken by design.

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 0

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.011 сек, 7 запросов выполнено - Использовано памяти: 1.79 Мбайт (Пик: 1.87 Мбайт) ]