Главная Настройка Mobile Контакты NSFW Каталог Пожертвования Купить пасскод Pics Adult Pics API Архив Реквест доски Каталог стикеров Реклама
Доски


[Ответить в тред] Ответить в тред

Check this out!


<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
89 | 2 | 36

Shell scripting thread Аноним 27/12/17 Срд 21:52:07  1113259  
2000px-poundexc[...].png (5Кб, 1200x1200)
bash-logo-web.png (13Кб, 376x158)
01-ordinary-pro[...].jpg (249Кб, 705x397)
unix-shell-in-d[...].jpg (81Кб, 638x479)
Шелл-скриптов и автоматизации *n{u,i}x тред.
Аноним 28/12/17 Чтв 01:26:08  1113335
В bash есть ассоативные массивы (словари), ни пизди!
$ declare -A ary
$ ary[hello]=world
$ echo ${ary[hello]}
Но для скриптинга в сколько-нибудь серьёзном масштабе баш всё равно подходит чуть более, чем никак.
Аноним 28/12/17 Чтв 14:38:14  1113452
>>1113259 (OP)
Боже, спаси и сохрани!

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

Спаси господь ваши души!
Аноним 28/12/17 Чтв 15:18:11  1113472
>>1113452
Ты лучше говори, что использовать.
Что говно и так известно более или менее.
Ну используют в каком-нибудь qbs для скриптования JS, но, знаешь, легче как-то нихуя не стало.
Аноним 28/12/17 Чтв 17:21:59  1113485
>>1113472
Процессами рулить. Пайпы, экзит коды, параллельный/последовательный запуск, ssh, автоматическое гашение чайлдпроцессов в trap. Если нужно что-то посчитать или обработать - пишешь на питоне, но в питоне процессы не спавнишь, а даёшь ему поедать stdin/cmdline и срать в stdout/exitcode. Потом это всё склеиваешь башем.
Аноним 28/12/17 Чтв 23:19:28  1113598
>>1113485
Или на руби.
Аноним 29/12/17 Птн 08:55:56  1113716
>>1113259 (OP)
Анончики, есть у кого-то хороший справочник по bash'у ?
Аноним 29/12/17 Птн 09:08:35  1113721
>>1113716
Тоже задавался этим вопросом, полезней всего оказалось прочитать ман (https://www.gnu.org/software/bash/manual/bashref.html) и наставить в нем закладок. За операторами сравнения и правилами развертывания переменных постоянно приходится лазать.
Аноним 29/12/17 Птн 09:09:29  1113722
>>1113721
Скобка прилипла, нутыпонел
Аноним 29/12/17 Птн 09:12:17  1113724
>>1113721

> За операторами сравнения и правилами развертывания переменных постоянно приходится лазать.

Для баша нормальный линтер не завезли?
Аноним 29/12/17 Птн 09:33:59  1113732
>>1113721
Спасибо
Аноним 29/12/17 Птн 10:12:12  1113744
>>1113716
>>1113721
man bash
info bash
Аноним 29/12/17 Птн 10:47:08  1113748
>>1113485
Стало нужно разделить лог-файл по 100M, не разрывая записи по частям. Пришлось делать на Питоне.
Аноним 29/12/17 Птн 10:49:43  1113749
А были попытки сделать язык, по возможностям не уступающий башу, но имеющий человеческий синтаксис для работы с переменными, массивами и прочим?
Аноним 29/12/17 Птн 11:23:04  1113758
>>1113749
Не нужен. Превратится во всякие бесконечные exec('program', 'arg').
Аноним 29/12/17 Птн 11:23:36  1113759
>>1113724
Откуда у тебя линтер на произвольном серваке, болезный?
Аноним 29/12/17 Птн 11:47:04  1113769
>>1113759

Линтер на соснольку прикрутить - сорт оф изврат, но думаю возможно; но речь не о этом - линтер здорового человека подключается как плагин для текстового редактора.
Аноним 29/12/17 Птн 11:47:22  1113770
>>1113748
о, ты классный и питон - мощь
split -C
Аноним 29/12/17 Птн 12:01:07  1113778
>>1113748
https://pastebin.com/8X2m2yzM
Сколько строк на питоне вышло?
Аноним 29/12/17 Птн 12:03:18  1113779
>>1113778
на моем баше вышла 1 строка..
на твоем по видимому нужно больше
Аноним 29/12/17 Птн 12:04:58  1113782
>>1113779
Да-да, выучил стандартный набор утилит. Молодец у мамы сегодня.
Аноним 29/12/17 Птн 12:07:10  1113784
>>1113782
не ну конечно пыхтеть городя лесенки из циклов и ifов на баше гораздо веселее
Аноним 29/12/17 Птн 12:16:33  1113790
>>1113784
Ну вот захотелось попыхтеть, ну что ты как не родной.
+ Что если нужно разбить по количеству символов, а не байт?
+ Что если в системе не установлен split?
Аноним 01/01/18 Пнд 07:12:36  1114665
>>1113749
Были, как с нуля - powershell, так и прикручиванием сбоку - xonsh.
>>1113758
Всё не так грустно http://amoffat.github.io/sh/
Аноним 01/01/18 Пнд 07:29:30  1114666
>>1113716
http://mywiki.wooledge.org/BashPitfalls
Аноним 01/01/18 Пнд 08:58:08  1114667
А скажите-ка честно, не кажется ли вам, что пора уже выкинуть coreutils/GNU software и написать этому барахлу замену?
Аноним 02/01/18 Втр 02:03:30  1114850
>>1114667
Что с ними не так? Работает - не трогай.
Аноним 02/01/18 Втр 14:29:55  1114942
>>1113770
Записи многострочные, вряд ли split их поймёт. Параметр -t не очень помогает.

>>1113778
Примерно столько же (ещё не дописал, лол). Суть такова: считываем файл, разбиваем на записи регулярным выражением, считаем размер строк, и, покуда не превышает, пишем в файл. Потом открываем новый файл и пишем дальше в него.
Аноним 02/01/18 Втр 14:31:55  1114943
>>1114667
Выкинуть не выйдет, но попробовать заменить стоит. Нужно только грамотно спроектировать, и чтобы не было заметно большой разницы.

ОП
Аноним 02/01/18 Втр 14:33:37  1114944
>>1114943
В принципе, можно просто написать какую-нибудь утилиту, которая заменит собой сразу несколько других утилит. Всё то же самое - разбиение файлов с различными условиями, обработка регулярных выражений и тому подобное. и получим в итоге перл

*ОП
Аноним 02/01/18 Втр 16:17:24  1114971
>>1114667
Ну я бы попробовал что-нибудь новое. Например меньше заучиваний и RTFM в пользу интуитивности. Меньше абракадабры с символами. Меньше всякой ерунды вроде fi, esac. Больше всякого для работы со строками. Возможно даже альтернативные нетерминальные версии с нормальным копированием на ctrl+c. Нормальный встроенный парсер cmdline вместо убогости getopts.
Аноним 02/01/18 Втр 16:46:12  1114988
>>1113758
Если использовать готовые языки, то да.
илсЕ
Если использовать специализированный язык, в котором внешние программы и пути вызываются без скобок, то нет.
илсЕ
Аноним 02/01/18 Втр 17:15:06  1114997
>>1114988
Мне что-то кажется что хаскель-подобный синтаксис будет очень хорош для шелла. Сложные склейки в одну строку там очень лаконично выглядят. И никакого сишного наследия в виде скобок, точек с запятой.
Аноним 02/01/18 Втр 18:41:50  1115026
>>1114997
А как это будет выглядеть?

ОП
Аноним 02/01/18 Втр 19:18:09  1115037
>>1114942
>Записи многострочные, вряд ли split их поймёт. Параметр -t не очень помогает.
повторюсь, тк ты тупенький
split -C
Аноним 02/01/18 Втр 19:35:38  1115045
>>1115037
только сплит будет частью конвеера, но все равно это будет 1 строка..
Аноним 02/01/18 Втр 19:38:57  1115047
>>1114971
>Меньше абракадабры с символами.
нормальные люди не работают на шелле со строками, хотя это и можно делать..
правильный путь - юзать баш для работы с файлами, а содержимое файлов обрабатывается отдельными текстовыми процессорами типа sed, awk и кучи другого
в винде же из cmd вызывались макросы на jscript написанные для обработки строк, хотя на cmd и есть весь набор трюков для работы со строками
Аноним 02/01/18 Втр 20:09:38  1115057
>>1115047
Дык sed/awk это ещё большая абракадабра как по мне. Я бы вообще инлайнил прямо в язык шелла какой-нибудь питон/луа, да хоть тот же жс, примерно как делают asm-вставки для сишного кода.
Аноним 03/01/18 Срд 10:29:38  1115204
>>1115037
Как split -C разберёт, где начало многострочной записи, а где конец? Он должен иметь какое-то представление о формате, в котором записи находятся. Записи обрубать нельзя.
Аноним 03/01/18 Срд 10:37:12  1115206
>>1115057
sed годная тема, на самом деле. Если возможностей его регулярных выражений не хватает, то можно запустить perl с какими-то ключами и получить всю мощь его регулярок.
Аноним 03/01/18 Срд 10:54:05  1115207
Офигеваю с этого. Пользуюсь и офигеваю.
$(echo ${files}|tr ' ' '\n')
Аноним 03/01/18 Срд 11:34:38  1115215
Имена файлов хранятся в массиве
@
${array[@]} выдаёт имена файлов одной строкой
@
Команда, которой их нужно передать, принимает их последовательно
@
command <(for i in ${array[@]}; echo $i; done)
@
2018-й год
Аноним 03/01/18 Срд 17:52:06  1115388
Какой редактор/IDE может поддерживает навигацию по функциям? Eclipse по идее умеет, но его нормально настроить, чтобы в нём вообще работать можно было - тот ещё ад.
Аноним 03/01/18 Срд 19:15:09  1115413
IF
@
FI
Аноним 04/01/18 Чтв 10:00:31  1115618
>>1115413
CASE
@
ESAC

Аноним 04/01/18 Чтв 10:34:54  1115622
>>1115618

DO
@
DONE
Аноним 04/01/18 Чтв 11:56:49  1115635
>>1115622
Название книги в магазине
@
Изучай bash
@
По бугурт-тредам
Аноним 04/01/18 Чтв 15:50:42  1115694
Кто-нибудь подобную няшу использовал?
https://github.com/tdenniston/bish
https://github.com/BYVoid/Batsh
Аноним 05/01/18 Птн 08:27:56  1115955
>>1114850
Много чего не так, почти всё устарело как для 2018 года.

Не стандартизированы подходы к парсингу командлайн параметров. Где-то -of=outfile, где-то --file outfile, где-то просто outfile. Разве это нормально?

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

Элементарные вещи считаются опциональной роскошью: буфер обмена со слотами быстрого доступа и историей, история директорий, регэкспы а не вайлдарды, быстрый интерактивный фаззи-сёрч по индексу файловой системы.
Превьюшки. Ничего бы концептуально не сломалось от отображения картинок в прямоугольных блоках mn знакомест.

Уродливые сокращения типа однобуквенных параметров (-p), операторов [ -e ... ] - это пережитки. Будь в баше нормальный автокомплит можно было бы нажимая столько же символов набирать читаемые команды. Буфер со списком автодополнений под строкой с промптом, автокомплит по пробелу - и тебе уже не надо запоминать флаги.

Ещё меньше надо было бы запоминать если бы в конфигурационные утилиты был добавлен интерактивный режим, наподобие виндового netsh.


Лично меня люто бесит когда какая-то консольная окаменелость из 70-х транкейтит длинные поля для того, чтобы впихнуть таблицу в 80 символов.
В браузере длинные строки конечно тоже транкейтится, но я могу увеличить размер окна, или выделить этот кусок текста мышкой, скопировать, и скопируется строка полностью. А в консоли я могу о таком только мечтать. Всех всё почему-то устраивает.

Даже веб-макаки давно осознали, что смешивать данные с их графическим представлением нехорошо.
Графические рюшечки, цвета, локализация, обрезка под ширину экрана - это то, что должно происходить один раз, непосредственно перед отображением. А в конвейере между командами должны бегать чистые структурированные данные в канонической форме. Ну чтобы всякие ls, find, ps, lsof, и пр. выплёвывали валидный CSV. И соответственно чтобы были утилиты, понимающие CSV, - что в первой строке имена колонок, умеющие эскейпить и анэскейпить, и т.д.

Говоря о структурированных данных я имею в виду не объекты в ООП понимании. Достаточно признать, что списки, списки записей/таблицы, мапы, деревья, графы - это объективная реальность, и сделать их first-class citizen, создать набор инструментов для полноценной работы с ними. List editor, tree navigator, graph editor - такого уровня абстрации.

Представь, ты редиректишь вывод ls в интерактивный table viewer открывается что-то типа панели двухпанельного файлового редактора, в этой панели ты можешь сортировать файлы, добавлять и снимать выделение по маске. А потом нажать энтер и отфильтрованый список полетит дальше в конвейер. Совсем необязательно ограничиваться файлами, записи могут быть любыми, записи из БД, процессы, ...
Табличный редактор (консольный эксель), мне тоже кажется логичной вещью, но почему-то не осилили.

Кстати почему текущая директория должна быть одна? Если бы это был полноценный стек, тогда mv и cp могли бы иметь синтаксис попроще, отправляя файлы в предыдущую директорию.
И почему текущая локация это обязательно директория, а не файл, урл, команда или список произвольных объектов?
Ничто ведь не мешало бы работать с ФС на манер JQuery - иметь массив текущих объектов, и функции для перехода внутрь, выхода наружу, фильтрации, выполнения операций над этими объектами.
Я бы с удовольствием сохранял вебмки так:
cd https://2ch.hk/b/res/<webm_thread>.html
cd https://.
\.webm
cp * ~/webms/
Аноним 05/01/18 Птн 10:30:35  1115985
>>1115955
Половину из этого можно реализовать сторонней утилитой, которая просто дополнит этот мир. Про хранение данных непременно в CSV - а может сразу в JSON или YML или ещё в каком вырвиглазе (в консоли будет именно вырвиглаз). Годные мысли здесь есть, потом прокомментирую, если хватит желания.
Аноним 05/01/18 Птн 15:27:15  1116071
может ли питон служить заменой консольной хуйни для красноглазиков? могу пользоваться на уровне vim, grep и прочей базы, баш учить не хочу

если да, то что можно почитать на этот счет?
Аноним 05/01/18 Птн 15:50:44  1116081
>>1115955
Думаю нужно не столько с флагами возиться, сколько прокачать find до уровня конструкции языка. Вот аналогия jQuery/xpath мне нравится. В конце концов, что браузерный дом дерево, что файловая система дерево.

Насчёт униформности данных, в шелле всё есть потоки байт, при выводе в терминал ещё и распознающиеся текущей локалью символы (хотя надо бы уже utf8 без лишних пре). Максимально универсально. Я бы затребовал от каждой утилиты иметь ключ к примеру --json, для чисто машинной обработки. CSV сильно ограниченный формат. YAML всё-таки для человекописных конфигов, а не для обмена. Плохо что json не потоковый в отличие от ксв, зато позволяет работать с деревьями и куда более самодокументируемый. Вывод в терминал в текущем виде меня в целом устраивает, к тому же он относительно хорошо работает через сеть.

Я понимаю твой посыл что надо брать лучшее из всего что уже изобрели, но вот шелл это одна из вещей, которые лучше оставить простыми. Ходить по урлам не поддерживаю. Ходить по записям БД тоже не поддерживаю, не нужно.
Аноним 05/01/18 Птн 15:54:20  1116084
>>1116071
В питоне сложные вещи делаются просто, а простые - сложно. Но вот сам посмотри:

import subprocess
print(subprocess.call('ls', '-l').stdout)

при том что stdin/stderr отцеплены, в баше же

ls -l

и всё. Какой-нибудь

ls -l | grep lol

в питоне будет уже увесистым многострочником. Баш он конечно кривой как скрипт, но отличный как интерактивный язык в большинстве случаев.
Аноним 05/01/18 Птн 15:57:45  1116088
>>1116084

спасибо, а где можно почитать вот про именно такой питон?
Аноним 05/01/18 Птн 16:12:18  1116100
>>1116084
А почему нельзя использовать os.system()?

И есть ещё IPython
Аноним 05/01/18 Птн 16:16:16  1116105
>>1116100
Там куча легаси в питоне, которую никто не удалит, так как это стдлиба и много кода уже на ней завязано. Даже я ошибся, надо уже не subprocess.call, а subprocess.run.

Ну вот и попробуй пописать башскрипты в ipython. ls в grep направить, и записать результат в файл.
Аноним 05/01/18 Птн 16:21:38  1116108
>>1116084
Можно сделать няшную обёртку оператора | (bitwise or)
Аноним 05/01/18 Птн 16:27:20  1116111
>>1116108
Хорошо. Как мне тогда сделать пайп из stderr в stdin? Как мне записать stderr/stdout в два разных файла/сабпроцесса?
Аноним 05/01/18 Птн 16:33:35  1116113
>>1116111
Я не вдавался пока в подробности, просто вижу, что отсутствие удобных в использовании библиотек вовсе не означает невозможность написать их.
Аноним 05/01/18 Птн 16:39:58  1116116
>>1116113
Конкретно в питонах, без препроцессинга, как я и говорил уже выше в треде >>1113758
Лучше посмотреть как минимум в сторону языков с бесскобочным вызовом функций.
Аноним 05/01/18 Птн 17:41:35  1116136
>>1116081
>Ходить по урлам не поддерживаю.
Познакомся с xidel - http://www.videlibri.de/xidel.html
Там по сути именно такой подход - список урлов является текущим состоянием, и он пропускается через цепочку фильтров и трансформаций.
И это работает охуенно.
Если добавить к этому всему интерактивность, с пошаговым выбором и выполнением ступеней конвейера, выйдет очень мощный инструмент.
Аноним 05/01/18 Птн 17:54:00  1116147
>>1116136
Выглядит неплохо, но где собственно cd?
https://asciinema.org/a/96613?theme=monokai&size=medium&autoplay=1&speed=1.5
Аноним 05/01/18 Птн 17:58:54  1116151
Ещё я немного не понимаю, зачем мне собственно ходить по урлам. Если очень хочется - можно примонтировать что-то удалённое как файловую систему и просматривать обычными ls/cd/cat/less. Даже часть апи ядра выставлена в виде файлов. От шелла нужно только запуск программ, работа с файлами и собственно кручение-верчение пайпами между процессами и экзиткодами.
Аноним 07/01/18 Вск 22:21:45  1117051
>>1116151
Одна из причин почему на перле так много можно сделать в одну строку в том, что там есть дефолтная переменная $_ ( https://perlmaven.com/the-default-variable-of-perl ).
Она позволяет во многих случаях пробросить результат одной команды на вход другой неявно.

$PWD похожа на урезанную $_, с тем ограничением, что в неё можно сохранять только путь.

Это хорошо работает для связки cd-ls. Если бы текущий путь надо было писать каждый раз заново, или явно сохранять в переменную то можно было бы сойти с ума.

Но для других связок это работает не так хорошо.
Например я работаю с REST-сервисом, и хочу сделать GET, модифицировать данные, и заPOSTить их обратно.
Мне приходится писать урл в команде два раза.
Это неудобно и сводит с ума. Конечно есть выход - написать специализированный шелл, работающий с REST. В этом шелле будет не $PWD, а $PWU - present working URL, и это заметно облегчит работу.

Да, написание очередного шелла это дупликация кода. Да, у нас вместо единого пространства команд, в котором любую пару команд можно скомбинировать, появляются отдельные островки. Но нельзя же просто так взять и записать урл в $PWD?

Есть и другая причина, по которой пишут новые шеллы - поддержка других языков, например python, js, sql. Но это избыточный труд. REPL, интегрированный с текстовым редактором, всегда лучше. Просто переключаешь синтаксис автокомплита и интерпретатор с баша на другой. И имеешь все прелести полноценного текстового редактора, а не очередной обрубок.

>Если очень хочется - можно примонтировать
Просто взять и примонтировать в общем случае нельзя.
Не всё укладывается в файловую иерархию. Например я ввожу поисковый запрос в гугле - откуда и куда я попадаю? Или вот я хочу найти все аудиозаписи, помеченные "tag1", но без "tag2" - какой путь соответствует этому контексту? Чтобы интерактивно разложить список контактов в чате по группам - тоже монтировать список контактов в ФС?
Аноним 08/01/18 Пнд 01:44:46  1117108
>>1117051
Обычно я просто тесты пишу в таких случаях. Вообще рест уже устарел, уже графкул и там нельзя ls/cd, там скорее упрощённый SQL. Исключение — это если ты пилишь какую-то популярную платформу, у которой уже миллионы пользователей что вряд ли.

> запрос в гугле
> найти все аудиозаписи
> список контактов в чате
Ну да, какого хрена баш не умеет котиков нейронками распознавать? Давно пора, 2к18 на дворе!
Аноним 08/01/18 Пнд 20:18:38  1117458
>>1117108
Если я не могу в консоли эффективно поменеджить свою тегированную аудиоколлекцию, или сделать запрос в гугле, то стоит задуматься, правдива ли легенда, что доминирование GUI-интерфейсов вызвано безголовостью 95% юзеров, а выбор павер-юзера это всегда консоль.
Может это консольные инструменты отстали от графических и не отвечают вызовам времени?

Одно из явных преимуществ GUI это реюзабельные компоненты, вроде текст инпут, grid или tree. У юникс-дедов такого не было, никаких фреймворков, минимум библиотечных функций. Они хуячили for-ами и радовались.

Недавно решил из любопытства посмотреть, как tree и pstree выводят древовидную структуру.
Оказалось, что вывод в обоих случаях навелосипежен:
https://fossies.org/dox/pstree-2.39/pstree_8c_source.html (PrintTree)
https://github.com/execjosh/tree/blob/master/tree.c (indent, r_listdir в unix.c)
В tree даже есть несколько режимов вывода, включая json и html, но этот функционал конечно же реализован под конкретные нужды, делать абстрактную реюзабельную версию автор не стал.

Поразила воображение функция patmatch в https://github.com/execjosh/tree/blob/master/tree.c
До этого я по наивности был уверен, что уж для матчинга вайлдкардов-то библиотечная функция есть.
Но нет, видимо древние программисты считали что DRY - это для слабаков.

Конечно же появляются замечательные инструменты для работы с о структурированными даными -
https://stedolan.github.io/jq/tutorial/ , https://csvkit.readthedocs.io/en/1.0.2/ , фреймворки и компоненты для построения интерактивных приложений - https://github.com/junegunn/fzf , https://github.com/jonathanslenders/python-prompt-toolkit
Они прекрасны, но это как склепать стартап на коленке, а потом написать фреймворк для его разработки. Поздно, теперь всё надо только всё переписывать.
Аноним 09/01/18 Втр 03:11:41  1117638
>>1117458
Так и есть. Но с другой стороны, размер рабочего инструментария, включая баш, не такой уж большой. То есть вполне посильно, даже в одно рыло, написать полный набор. Сложнее набрать действительно годных идей чтобы перекат был убедительно выгодным.
Аноним 09/01/18 Втр 12:40:47  1117715
Посоны. Задам тупой вопрос, но все же. Насколько я понимаю, после for двойные скобки - это не те двойные скобки, которые позволяют выполнять арифметические операции. Так почему решили их использовать после for, а не одинарные?
Аноним 11/01/18 Чтв 09:14:37  1118592
>>1117458
Я тут поразмыслил ещё. Во-первых я даже и не знаю существуют ли потоковые парсеры JSON Нашёлся YAJL. Во-вторых, это нужна аж целая типизация и валидация схем чтобы состыковать друг с другом две утилиты в пайп. Можно конечно на авось, ну прямо как сейчас в баше, пробовать руками на живую и надеяться на лучшее, но как-то не круто.

С другой стороны, файловая структура вполне представима в виде подмножества XML. Например не нужны текстовые ноды, теги directory, file, symlink, атрибуты тегов = атрибуты файлов. Берёшь себе XPath и не нужны никакие find/ls/grep/wildcards/glob.
Гистограмма Аноним 11/01/18 Чтв 12:25:28  1118635
Пацаны

есть вывод параша вида
xAgarsc68J~iEzbOTuCpLQ1QUnyRY~BZAYbNxOAMviiXdLuatdd3sSRdVveuKyBwKUYNvrFJilFfZv7OmO1S91SLUBuzD~gYJ4mB4fQJHsk3qQO0S6lKgvbny~DrH~dE~QdL11A9rGq60sM_WPUZOn3LRXI6PFtLuzfbDtK3~_DP~1Is5U2TAii5iRLfK1As3oIwLletsquPc0k09Qeez2I89IRPEJiDQa5y14i15kxhmBlJ1wPC9xFVZzTyFDkYm2wLscN0kuYO3i_yZ7jmL5NhGDV9YWo7DFwmBb~mCpSAJBi95eK2g6rP057af91xb50rgskszmiGot2rBfzVqaVZ9JtKZJ5BtuZaa6MsZdt5RGaY0Oj2yqpkG~Lqhp5XP1UEt8YypSpV0oLOQTcOo58O~HI~_6HO1z7qxTdWNVAfziqsD8xHBK4buflspJh6E1sIGp0PP7lmRrdSJGukP6fGkb8dx4fdbsEqEqgFAIKOdHfMY45AFFxZTSxewcTv18cmJ3NWpwP1RuTIKIJnErHK1Y7boBoS8SNbXu69pHBlQhC4XN7dx~7uOKZbcHL5mQ3pKCRK1wfpYiUsqxmquICYYlvAwENgnZAYCWNfyClPL4FNdhV_KO44G0hnsDmBD6WN7jfAOb4U~lgWMHTOIH5NWZtqv~zsNL2Q~Q3X_P3vHLO3_iLfa57yDK4Bqc61yP63ABwsD8YDxxICK1YnNJpJAOd2TdTw~eQv12RaH3w7X4ScLLA_ITpTC_~LkuLrC4UCZqLZNSDrdnv~7SQWrMZdUN0RDSlITM49gvcjrTAPJtttEqtPK11_vyfYbX2zmOlBTDfjUsO8INlE_pmdei7HjaSI5hSxk4Hn747FRgGFW3zpVnaRAHnqhx8VmlDt5q2y3ZA0sEAP274vudv6xzzQ01m0MQt8QYYdmiRByWUfRG8mT~bEtht6nHxxRBImkT7Pg3~tpymbH5N_WdL_yucJxYfaRKkRtdjpMYmuy_IZtPk8OsDpNPEu1vdZBO9Fn0nt0Ggym9H4D9XGAo6afIasLasLGRYqMZUZiY3dFUNO14GFm9Xl2fmtGva0j7oqE

как нарисовать красивую гистограмму частоты употребления различных символов?
Аноним 11/01/18 Чтв 19:46:50  1118804
>>1118635
Через uniq составь данные, в потом смотри https://stackoverflow.com/questions/123378/command-line-unix-ascii-based-charting-plotting-tool
Аноним 18/01/18 Чтв 05:51:41  1121568
хотелось бы получить из изображения голые коды, без формата, но я так и не понял как это сделать через, например stream. не знаю по разделу ли это. или вообще, какие ещё способы? чтобы без формат, а голые коды.
Аноним 18/01/18 Чтв 17:00:22  1121819
вроде разобрался - там баг на пнг. просто сконвертировал в tiff.
Аноним 25/01/18 Чтв 08:19:13  1125863
1320273158creat[...].jpg (49Кб, 700x433)
Ну что же вы, ватманы, не придумали ещё свой идеальный шелл? Только не надо пожалуйста векторных фидонетов и кластеров метапарадигм.
Аноним 29/01/18 Пнд 20:11:43  1128815
>>1113259 (OP)
Advanced Bash Scripting Guide - тру для обучения?
Или есть альтернативы на рабском?
Аноним 29/01/18 Пнд 22:10:35  1128883
>>1128815
Вполне сойдет, только начинай читать все таки с. beginners, не приумножай свои возможности
Аноним 02/03/18 Птн 11:05:21  1148413
блять, как же я горю со скриптовых языков
Аноним 08/04/18 Вск 23:09:55  1170433
Есть много файлов .ext.
К каждому из них применяется медленная однопоточная программа
for file in
.ext
echo Processing $file ...
do program arg1 arg2 ...
done
Ох как надо распаллелить это дело в том смысле, что несколько потоков будут идти по списку файлов и вызывать несколько экземпляров program для обработки отдельных.
Как сделать это в bash - ума не приложу. Лезть в GNU Parallel страшно, я-то даже xargs боюсь.
Всё-таки придётся? Ну или как это можно по-другому обыграть? А в GNU Parallel-то можно будет?
Аноним 09/04/18 Пнд 00:02:39  1170466
>>1170433
Капчую с гейфона, под рукой нет возможности проверить. Ты полез слишком глубоко и не владеешь в должной мере башем. Зачем тебе городить цикл, когда проще будет

find . -type f -name .ext -exec program -arg1... {} ;\ & done
Аноним 09/04/18 Пнд 11:39:53  1170641
>>1170466
Соответствующая строка почти работает.
find .$ext -print0 | xargs -0 -I{} -P $thrnum magick convert -quality $quality -resize $width "{}" ./$dir/"$(basename "{}" .$ext).jpg"
Но basename не отрабатывает, в итоге я получаю файлы
.$ext.jpg в конце. Да и следующая строка не работает как надо в этом же плане:
mkdir $dir; gfind *.$ext -print0 | xargs -0 -I{} cp "{}" ./$dir/"$(basename
'{}' ".$ext").jpg"
Т.е. опять исходное расширение не убирается.
Не понимать.
Если что, для определённого заранее file следующее работает, как ожидается:
magick convert -quality $quality -resize $width "$file" ./$dir/"$(basename "$file" .$ext).jpg"


Аноним 09/04/18 Пнд 11:43:23  1170643
>>1170641
Звёздочки просраны, это не может не бесить.
find •.$ext -print0 | xargs -0 -I{} -P $thrnum magick convert -quality $quality -resize $width "{}" ./$dir/"$(basename "{}" .$ext).jpg"

mkdir $dir; gfind •.$ext -print0 | xargs -0 -I{} cp "{}" ./$dir/"$(basename
'{}' ".$ext").jpg"

magick convert -quality $quality -resize $width "$file" ./$dir/"$(basename "$file" .$ext).jpg"

Аноним 09/04/18 Пнд 16:42:44  1170761
xargs не помещает в переменную shell'a имя файла, просто подставляет вместо строки -I.
Непонятно, однако, почему не работает ./$dir/"$(basename "file" .$ext).jpg".
Ведь вместо file должно оказаться его имя.
Аноним 09/04/18 Пнд 17:10:56  1170776
Короче, кратко суть проблемы.
Пусть file="a b.c"
ext=".c"
> $ echo $file | xargs -Itest echo "$(basename "test" .$ext)"
> a b.c
Говно, хотелось "a b".
> $ echo $file | xargs -Itest echo ${test%.$ext}
>
Говно, тут вообще пустой вывод.
Был вариант от find передавать аргументы куда-нибудь в вырезалку расширения через пайп, но для вырезания расширения надо в переменную забивать, а переменные юзать в многопотоке очково.
да и там -print0 с аргументом -0 xargs хорошо сочетается, с другими элементами могут быть проблемы.
Аноним 09/04/18 Пнд 18:35:18  1170819
>>1170641
>>1170643
Сорри, мэйт, но в этом ковырятся чет нет желания, ты максимально как-то усложнил всё. Ещё и описываешь таким слогом, что мозг ебется.
Аноним 09/04/18 Пнд 18:57:18  1170837
>>1170819
Время устроить здесь бложик с жалобами по поводу того, что xarg в выражения типа $(command test) не подставляет, хотя -I test задано.
Понимаешь, у меня find считывает список файлов с расширениями, заставить find обрезать всё после последней . невозможно.
Он через конвеер идёт в xargs, в котором -Ismth, т.е. smth - имя файла.
И оно передаётся проге нормально как аргyмент: "smth". Но у проги вывод задан в ./$dir/"$(basename "smth" .$ext).jpg", где $dir заранее задан и создан.
Но вот команда basename не работает.
Она, на удивление, не отрезает расширение, т.е. возвращается исходное имя с расширением, конкатенированное с .jpg.
Аноним 09/04/18 Пнд 22:52:49  1170966
Спащу лучше то, что оказало таки нужное действие.
Есть разрешение ext, кол-во потоков thrnum, остальное - юзелесс параметры проги.
ls | grep -F ".$ext" | sed -e 's/\.'"$ext"'$//' | xargs -Ifile -P $thrnum magick convert -quality $quality -resize $width "file.$ext" ./$dir/"file.jpg"
Аноним 10/04/18 Втр 02:17:29  1171044
>>1170966
То, что ты хочешь, делается влегкую через parallel, но можно обойтись и xargs'ом, только придется немного изъебнуться:
find <....> | sed -r 'p;s,.+/([^/]+)\.[^/]+$,'"$dir/\1.jpg," | xargs -n2 -P$threads convert -quality $quality -resize $width
Регулярку не проверял, но идею, думаю, ты понял.
Аноним 10/04/18 Втр 22:24:09  1171434
Возможно не совсем в тему треда, но есть ли годные книги или ресурсы по VBS? Нужно быстро вкатиться, написать shell-скриптов для гп под винду и укатиться.
Аноним 10/04/18 Втр 23:02:45  1171453
>>1171434
По VBS тонны книг и все в той или иной степени годнота. На рутрекере в поиск вбей и выбирай нужную.

От себя хочу добавить, что это уже мертвый язык и лучше бы тебе задрачить powershell. Он проще. В гугле или на рутрекере набери. powershell group policy.
Аноним 14/05/18 Пнд 07:24:38  1189499
Пока вы тут выдумываете векторный фидонет, люди уже пилят:
http://www.oilshell.org/


Топ тредов
Избранное