Как начать писать на этом говне? Почему оно такое неприветливое? Каковая сейчас обстановка в написании сценариев linux? Нормальные люди используют perl/python?
Так же как и с любым другим говном. Ставь себе конкретные задачи, для предметной области которых требуется умение в баш. И решай эти задачи. Самым эффективным будет если ты полностью удалишь винду и будешь пользоваться исключительно линуксом.
>>848214 >баша хватает, более чем, для всего, ваще. Are you serious? А ну ка, запили мне на баше трёхмерный массив. После того, как справишься с этой простой задачей, подкину тебе другую простую задачу.
>Каковая сейчас обстановка в написании сценариев linux?
На работе люди все чаще используют сценарии ansible, chef, puppet и salt. Баш-скрипты чаще закидывают в релиз, тоже самое касается make. Макосовский консольный софт часто скриптуется на ruby, так как он там есть изкаропки. А так - ничего не мешает использовать что угодно, любой скриптовый язык подходит для таких задач. Хоть на нодежс скриптуй свое админство. А так, конечно, лучше на пистоне или рубях, если уж делать свой велосипед. Перл говно, недалеко от баша ушел, и то, и то трудно читать.
>>848209 (OP) Используй IPython, он кроссплатформенный, весь Python с его либами уже входит + поддерживает команты shell'a. Использую одни и те же скрипты под Debian и Windows 7, полёт нормальный.(Он ещё и ООП!)
>>848822 Мне так удобнее. Вот представь, есть N серверов. Некоторая часть из них промышленные Np. Некоторые тестовые Nt. Тестовых несколько групп Nt1, Nt2, Nt3... Некоторые из них подготавливаемые к пуску Npp. Все они в одной подсети. Взаимоотношеня между серверами построены по принципу frontend - backend, при том у одного фронтенда может быть несколько бекендов и у одного бекенда может быть несколько фронтендов. И ещё есть различные категории пользователей, которым надо обеспечивать или перекрывать доступы к разным группам. Элементарная задача для сисадмина. Надо всего лишь выстроить трёх мерный массив, где по осям x,y будет двумерная таблица серверов, а по оси z будет всё множество пользователей. Но на голом баше такую хуйню заебёшься реализовывать.
curl ${URL_PREFIX}/litery.html \ | grep -oE '[a-z][.]html' | xargs -n1 -I{} curl ${URL_PREFIX}/{} \ | grep 'target="znaczenie"' | grep -oP '(?<=href=").*?(?=")' \ | xargs -n1 -P${NTHREADS} -I{} curl ${URL_PREFIX}/{} \ | sed '/^</!ba;/<dt>/!d;:a' [/code] Ну попробуй это переписать на своем любимом питухоне. Мало того, что коду будет в разы объемнее, так ещё и времени ты на это потратишь поболее, хотя бы потому, что ты не сможешь писать/тестировать звенья конвейера поотдельности.
>>848826 >Элементарная задача для сисадмина. А где задача-то? Массив построить? Ты уверен, что именно это конечная цель? Какой тебе программировать, если ты даже в нормальную постановку задачи не можешь? Хоть бы сначала какой-нибудь курс вроде SICP'а прошел.
>>848888 Переписал на своём любимом груви http://pastebin.com/rMaj8aY1 Не понял почему нельзя тестировать звенья конвейера по отдельности. По-моему наоборот, невозможность сохранить составную структуру данных в переменную замедляет отладку, и заставляет писать подобных многоэтажных монстров вместо простого и ясного кода.
В голой консольке такое многострочное выражение набирать в любом случае неудобно. Сложно перемещаться между строками (лучше не нажимать ВВЕРХ лишний раз), и нет подсветки синтаксиса, без которой не поймёшь правильную ли ты кавычку поставил и всё ли заэкранировал в регекспе.
Алсо у твоего скрипта проблемы с кодировкой текста.
>>848949 >>848949 >Переписал на своём любимом груви Неплохо, особенно для jvm-монстра, но с шеллом всё равно не сравнится. >составную структуру данных Тебе ещё только предстоит познать юникс-вей, юный падаван. >В голой консольке такое многострочное выражение набирать в любом случае неудобно. Именно в ней код и писался. Сделал запрос, оценил вывод, добавил следующий элемент конвейера и так далее. Если повторное выполнение какой-то части конвейера занимает многовато времени, то просто ебанул её вывод во временный файл. >Сложно перемещаться между строками А зачем между ними перемещаться? >Алсо у твоего скрипта проблемы с кодировкой текста. Мне не критично, скрипт был одноразовый. Но при желании можно было флажок у curl поискать или просто ебануть iconv.
>>848209 (OP) >Нормальные люди используют perl/python? Админы - Perl, активно. Более того, зачастую без него тупо неудобно, ведь это Practical Extraction and Report Language, т.е. язык, созданный для сложного парсинга логов и составления отчётов. Пайтон - реже, но никто не запрещает.
Зависит от задач. Смотри примеры немножко ебанутые, придумываю на ходу, прошу не цепляться к тому, что обычно так не делают или делают, но только конченые пидорасы, они призваны только показать, что у разных инструментов есть разные специфики применения, а я слишком сонный, чтобы выдавать идеальные варианты. Допустим, ты админишь линуксы. У тебя возникла задача, например, отследить, что произошло с письмом на транзитном сервере с Sendmail и SpamAss, который, например, стоит между интернетами и чангой/зимброй/етц. Ты делаешь cat, грепаешь отправителя, выделяешь (awk'ом) ID и грепаешь лог уже по ID в одну строку, и получаешь всю историю письма. Очень грубо. Можно залезть в несколько логов разных систем, смотря по ситуации. Это типовая задача для sh.
Допустим, ты получаешь текстовый CDR или даже лог событий FreeSwitch, нужно выловить историю вызова. Тут простым грепом не факт, что отделаешься, наверняка придётся лезть в Perl.
Что там ещё?.. Допустим, надо сделать бекапы. Ну тут чем нативнее и проще, тем лучше. Даже не интересно.
А вот если нужно собирать информацию по крону и в зависимости от полученных данных дёргать разные системы или делать что-то ещё... Скажем, ты ленивое хуйло (а с точки зрения начальника это наверняка так) или твой начальник жадный мудак (а вот это обычное дело с точки зрения инженера) и ваше коллективное раздолбайство мешает вам замутить Zabbix/Nagios или ещё какую систему мониторинга, в которой всё есть искаропки. А тут владелец здания задумал ремонты делать и в серверной стало регулярно пропадать питание на больший срок, чем тянут упсы, после чего половина серваков от неожиданного выключения не поднимаются сами и просят помочь им, ты берёшь и пишешь скрипт для крона, который проверяет состояние и заряд упса, если обнаруживает, что пролпало питание на входе, то шлёт тебе письмо с уведомлением, а если видит, что заряд снизился ниже критической отметки - посылает серваки в корректный даун. Такое ты на sh писать замучаешься и наверняка возьмёшь что-то более юзерфрендли с готовыми модулями для работы с почтой, SNMP и всем остальным. Тут как раз я подозреваю, что зарулит что-то Python'оподобное, но не факт, что именно Пайтон.
Но на самом деле во всех примерах я умышленно опустил один момент. Первым делом ты лезешь в интернет и ищешь, кто и как это уже сделал за тебя, раскуриваешь найденный код на любом языке и адаптируешь под свою ситуацию. У хорошего админа хватит на это скилла даже если язык он знает очень примерно, иногда даже если вообще впервые видит.
>>849119 >неподходящие области применения вроде сисадминства Сисадминство это очень широкая тема и есть задачи, когда Python действительно может оказаться удобнее. И уже задача админа определиться, в данном случае ему проще использовать более подходящий для задачи инструмент или тот, который ему более привычен и субъективно больше нравится. По большому счёту мало задач, которые нельзя решить на первом, что подвернётся под руку, останется только вопрос удобства.
>>849132 Ничё так накатал, аж офигел. Кстати, проёбанная разметка -- из-за звёздочек перед sh, коими я хотел показать,что это относится ко всем выросшим из sh шеллам.
Решил немного поучится писать на этом говне и, от нехуй делать решил сделать скрипт, который не дает коммитить тебе в гит (если его прописать как алиас git). http://pastebin.com/9piFjC35
вроде все просто, но чего-то не хочет хавать, например, ключ -а и тому подобное.
так или иначе, как правильно передавать параметры в скрипт? особенно стринги (типа git commit -m 'le string')
>>849143 Ебать ты аутист. Методом питонячьего тыка пытаешься разобраться что ли? Не хочешь маны читать, так хотя бы с базовыми конструкциями баша ознакомился бы.
>>849158 Кто аутист, ты аутист ептэ. > будь мной > хурп-дюрп, неплохо бы уметь в примитивный BS для утилитарных целей > придумай (тупую) идею для примитивного скрипта > полчаса гугления и стаковерфлоу >> почти работает > спрашиваешь двачей об особенностях передачи параметров в скрипт. > АААААА!!!!!1 ЧИТАЙ ЕБУЧИЙ, НАПИСАННЫЙ ЖОПОЙ, КРАСНОГЛАЗЫЙ МАНУАЛЬ НА ТРИ МИЛЛИАРДА СТРАНИЦ. > нихуя ответа по сути Чувак, мне сейчас а) не уперся скрипт на таком уровне б) не то чтобы у меня сейчас было дохуя времени, чтобы читать целые мануали к языкам, к которым у меня нет профессианального интереса. Меня сейчас вполне устраивает уровень скрит кидди в этом говне. Я вообще макоеб, если уж на то пошло.
>>849185 man 1 getopt >чтобы читать целые мануали к языкам Юрист что ли? Как ты вообще в IT оказался, если даже не умеешь добывать нужную информацию из документации? >к которым у меня нет профессианального интереса Зачем себя мучать?
Потому что баш это специализированный язык управления процессами, потоками данных и параллелизацией. Это не для написания обычных прикладных программ. На баше лучше не писать калькуляторы фибоначчи, хотя никто не запрещает, но это будет сложнее и хуже, чем на любом general purpose языке. Но вот зато отспавнить процесс, направить его stderr выхлоп в другой процесс - лучше баша это не сделает никто (ну разве что какой-то другой шелл).
Кто сказал Фибоначчи? Специальную олимпиадку объявляю открытой http://ideone.com/3hHXQG cat - $FIFO <<EOF | sed -nu 'h;:a;n;x;G;s;\n;+;;p;ba' | bc | tee $FIFO 0 1 EOF
>>849294 >Как ты вообще в IT оказался, если даже не умеешь добывать нужную информацию из документации? Блядь. Один из путей добывания информации это, блядь, спросить у того кто под рукой и опытнее, совсем чтоли охуели вы тут все? Сука, я потратил 30 минут на скрипт, не зная о языке почти нихуя, и он, сука, почти работает, но вот с проблемой передачи параметров с наскоку не справился. Спросил в чем, блядь, особенность. Нет, блядь, развели рассуждение о том какой это нахуй специализированный язык для илитки. Ну, то есть я могу потрать ее 30, 60 минут, два часа, чтобы понять в чем проблема, а могу СУКА СПРОСИТЬ СОВЕТ НАХУЙ. Не, ну серьезно, по сути вопроса ответа вообще нихуя. только ссылка на оглавление (!) мануаля, который, естественно, мне выпадал в гугле миллиард раз. >>849294 >Зачем себя мучать? Во-первых, интересно, во-вторых, простенькие скрипты, с проверкой существования файлов, манипуляцией аутпутом и т.д. это полезно чисто в утилитарных целях, там повесить в крон и дергать какие-нибудь логи за анус, например. >>849358 >Это не для написания обычных прикладных программ. Кхм, я сюда пришел со скриптом (ладно, окей, "скриптом"), который пытается перехватить управление у гита и игнорировать коммиты делая вид что нихуя необычного не происходит. Какие нахуй прикладные программы?
>>849464 >не зная о языке почти нихуя Так надо было узнать. Хули тебе, документацию пересказывать что ли? >СУКА СПРОСИТЬ СОВЕТ НАХУЙ Вот тебе и дали совет: ЧИТАЙ СУКА ЧИТАЙ БЛЯДЬ, чтобы не заебывать потом людей тупыми вопросами и кусками кода, которые с легкостью бы продавались в цирке как результат деятельности слона Джимбо. >оглавление Не умеешь таким пользоваться? Тебе надо было странички перечислить? Или, может быть, прямые ссылочки на все главы, с которыми бы тебе стоило ознакомиться? >который, естественно, мне выпадал в гугле миллиард раз. Даже безмозглая машина лучше знает, что тебе нужно.
>>849480 >которые с легкостью бы продавались в цирке как результат деятельности слона Джимбо. Я прекрасно понимаю, что это скрипт уровня "кот на клавиатуру насрал". Но мне нахуй и в пизду не сдалось это говно на более высоком уровне. А на таком - БЫВАЕТ ПОЛЕЗНО. Если бы была более простая, хоть и кастрированная альтернатива - да неебатся, я не гордый. Я в детсве .bat-файлы писал, не умер (разве что немного внутри). Но тут документация пиздец жопой писана. Мне нахуй не нужно лезть в глубину этого дремучего ада. Мне просто нужно перехватить параметры и передать их обратно как было.
>>849521 >Но тут документация пиздец жопой писана. А ты её читать собрался что ли? Там всё равно ничего нового не написано. Просто полистай выборчно интересующие главы, погляди примерчики, ознакомишься как раз с основными конструкциями, средствами языка, основными командами — делов-то на вечерок. Хотя бы будешь уже представлять, что как и чем тут делается, а нюансы уточнишь по мере необходимости.
Как написать скрипт, запускающий cl.class (java cl) без указания полного пути до cl.class при условии, что скрипт и .класс файл в одной папке? Что бы он не сломался, если папку переместить.
>>849358 >баш это специализированный язык управления процессами, потоками данных и параллелизацией Ну не совсем так. Шеллы, включая bash, даже проще - они просто объединяют по определённым правилам (по весьма небольшому списку правил) выполнение некоторых программ, а значит фундаментально возможности языка ограничены лишь возможностями программ, оперирующих текстовыми строками, используемыми в качестве интерфейсов в классических шеллах. >>849554 Это работает НАМНОГО медленнее.
>>849738 Блин. Пофиксил скрин на всякий случай. Если не веришь или думаешь, что я правлю скрипт в другом окне ради троллинга, то могу записать вебм-ку.
сап, антоны. Пишу костыль, который нужен для администрирования oracle (для учебы). Суть в том, чтобы написать баш-скрипт, в котором будут выполняться команды из sqlplus и lsnrctl. Но естественно они не выполняются, если написать их прямо в баше. По сути выполнение заканчивается на запуске этих самых утилит. Как передать им управление из баша? Пока писал, придумал просто выполнять из из другого скрипта. Что скажете?
>>849743 sqlplus программа-интерпретатор командной строки для работы с системой управления базами данных Oracle Database. Т.е. просто запускается эта программа и через терминал ты выполняешь уже команды этой программы.
а мне нужен баш для калькуляторинга, потомучто калькулятор найти в ебунте тот ещё квест, особенно с ебунтой установленной на флешке - может найти а может и нет
>>849745 Правильный путь - проверить в манах, нет ли у ней ключей, которыми можно передать команду. Простой путь - направить в неё команду имитацией ввода через "<<". Имей в виду, что если команда задаёт несколько вопросов, например, ты вводишь "sqlplus", а он тебя начинает "Какой там адрес сервера", "Логин свой назови", "ПАРОЛЬ!", то их надо передавать одним пучком.
>>848209 (OP) Немного оффтоп. Если ты считаешь это говном, с какой целью тебе нужно на нём начинать писать? Тебе кто-то запрещает использовать perl/python?
>>848250 >Perl/Pizdon нинужны, баша хватает, более чем, для всего, ваще. Всего - это чего? Если тебе нужно не просто автоматизировать какие-то действия, а сформировать какой-то отчёт, то тут без языка, в котором есть хэши/словари, очень туго. Можно извращаться и использовать баш, но это геморрой полный.
>>848826 >Взаимоотношеня между серверами построены по принципу frontend - backend, при том у одного фронтенда может быть несколько бекендов и у одного бекенда может быть несколько фронтендов. вот это вообще пушка
>>849119 Конечно же отмороженнее. Фанбоев развивающегося языка можно понять. Но баш это замороженное говно мамонта без будущего, хаотичное нагромождение фич вокруг программы работы с терминалом, которое решили дотянуть до языка. Легаси в худшем проявлении. "Using ;;& in place of ;; causes the shell to test the next pattern list in the statement, if any, and execute any associated list on a successful match." "&>>word is semantically equivalent to >>word 2>&1" Фу, бля. Выжечь напалмом.
>>849787 Вот ченджлог 4й версии с 2009 http://tldp.org/LDP/abs/html/bashver4.html По-моему это агония. >Баш это интерфейс для взаимодействия с ОС. И это хуёвый интерфейс взаимодействия с ОС. Как раз на то, как происходит редактирование командлайна особых ограничений обратной совместимости нет. Но ни удобных хоткеев, ни возможностей копипаста даже на уровне notepad.exe там нет. А хотелось бы множественные буферы обмена, и чтобы был шорткат для их быстрого просмотра и выбора по номеру. history не то. И возможность выделить кусок текста и автоматически экранировать/разэкранировать его. Когда я пишу длинную команду и вдруг вижу повторяющуюся ошибку я не хочу дописывать в начале команды history -a, жать энтер, а потом !!:s/wrong/correct/. Я хочу нажать хоткей, ввести wrong, энтер, correct, энтер. И чтобы в этих полях ввода поддерживался копипаст. Блядь, интерактивности хочется. Чтобы когда я пишу команду с вайлдкардами мне рядом показывалась её распакованная версия. Да посмотрите хотя какие крутые экспанды путей делает zsh. Почему баш вместо этого в носу ковыряется?
>>849983 Большая часть из того, что ты описал, относится к терминалу, а не интерпретатору. Ничто не мешает тебе запилить свой эмулятор терминала с блекджеком и интерактивностью.
>>849995 >у большинства людей итт явно неверное восприятие баша. Это не ЯП в первую очередь. Баш это интерфейс для взаимодействия с ОС. >Большая часть из того, что ты описал, относится к терминалу, а не интерпретатору. Ясно.
>Ничто не мешает Мешает тот факт, что баш де-факто стандарт. Я могу сделать себе удобное окружение. Но когда я захожу на удалённую машину у меня обычно есть только голый уродливый баш.
>>849999 > Я могу себе установить удобную IDE для Java. Но когда я захожу на удаленную машину у меня есть только голый уродливый /usr/java/javac Понимаешь к чему я веду?
>>849999 Да нихуя тебе не ясно тбх. То, что ты описал это пользовательский интерфейс с терминалом. Чуешь разницу? Или тебе опять всё нужно пережевывать да переваривать?
>>849786 >хаотичное нагромождение фич В 95% случаев этими фичами никто не пользуются, потому что они не нужны. Конечно, изредка при написании однострочника бывает удобно воспользоваться перделкой баша вместо вызова, например, sed'а, и сократив тем самым код на 10-15 символов, но полезным или необходимым это не назовешь. Как уже сказал товарищ выше, ты неправильно воспринимаешь баш. Это не изолированный язык, как какой-нибудь питон, и на нем не пишется основная логика. Это просто клей между отдельными гхм... командами, у каждой из которых свой предметно-ориентированный язык. Поэтому от самого языка много и не требуется: массивы, словари, структуры, объекты - всё это для языка, задача которого соединить выход одной программы со входом другой, излишне.
>>850003 >Понимаешь к чему я веду? К тому, что скомпилировать джава-код на удалённой клиентской юникс машине бывает нужно так же часто, как что-то там поадминить, например погрепать логи, сконфигурить и поднять сервис и т.д. Мой опыт говорит об обратном. Мне по работе приходилось заходить на aws-овские серваки и AIX серваки с ksh на борту, но вот компилировать джава-код там не потребовалось ни разу.
>>850004 >То, что ты описал это пользовательский интерфейс с терминалом. Как терминал может заэскейпить/разэскейпить выделенный текст в командной строке? Как он может сделать подстановку по хоткею? Как он может на лету делать экспандинг строк? Мне это нихуя не ясно, разжуй плиз. Насчёт копирования - в секции Killing and Yanking мана баша упоминаются некоторые возможности. И kill-buffer там есть (типа буфер обмена с историей). Но даже для такой операции как kill-region (аналог cut) по дефолту не назначен хоткей. Да кому может понадобиться вырезать текст?
>>850009 Я не понимаю людей, которые с энтузиазмом копаются в этой куче. Моя реакция - колотить в дверь, звать начальника и требовать хотя бы zsh.
>>850173 Справедливости ради, zsh - то еще нагромождение действительно хуевой тучи фич на любой вкус, цвет и извращение. Но даже не копаясь в этой куче с энтузиазмом, можно ощутить эту разницу в интерактивном использовании между zsh и bash.
>>850180 Зачем тебе бензопила? Если тебе не хватает топора, чтобы расчистить гектар джунглей, значит,что-то ты делаешь неправильно.
>>850204 Аналогия не верна, видимо, ты прошлый пост жопой читал >Зачем тебе этот клей с блестками? Если тебе не хватает суперклея, чтобы собрать топор для расчистки джунглей, значит, что-то ты делаешь неправильно. Вот так было бы правильнее
>>850173 > К тому, что скомпилировать джава-код ... Нихуя я ты не понял. Я солидарен с вышеотписавшимся аноном о том, что ты путаешь поятия: терминал/эмулятор терминала и интерпретатор. sh, bash, zh, пидораш - это все языки с интерпретаторами. Интерпретатор по определению не может быть интерактивным. Интерактивным может быть софт, в котором ты набиваешь команды и шлешь их бинарнику интерпретатора. > когда я захожу на удалённую машину у меня обычно есть только голый уродливый баш Опять же, на удаленной машине только интерпретатор (к тому и была аналогия с javac), команды ты набиваешь в локальном терминале, который под капотом просто их шлет по ssh на удаленную машину.
>>850237 >sh, bash, zh, пидораш - это все языки с интерпретаторами. Когда я набираю часть имени файла и жму таб - кто предлагает мне варианты продолжения, терминал или "бинарник интерпретатора"? Когда я жму бекспейс, кто определяет, надо ли удалить символ $, стоящий перед курсором? Когда я ввожу латинскую "a", кто определяет как отреагировать? Подсказка: я только что выполнил команду bind '"a":"SOSI"'
В общем если ты ещё не понял, то шелл берётся за дело не в тот момент, когда ты жмёшь энтер. Он проделывает кучу грязной работы по обработке нажатий клавиш ещё до этого.
>>850227 В zsh навигация по ФС и набор команд быстрее происходит за счёт более интеллектуального автокомплита. Например вместо "cd /home/Anon/porn/loli/" можно писать "/h/a/p/l". Меньше нужно печатать и работа идёт быстрее.
>>848209 (OP) Если тебе так хочется писать на ГНУтом, тормозном и дырявом говне, то так уж и быть, не стану метать бисер перед свиньями, в конце концов, свобода бытия говноедом это тоже свобода, которую нарушать нельзя. Только, будь няшей, и приучи себя писать в шебанге "#!/usr/bin/env bash" вместо пикрелейта. Спасибо.
>>849787 >Баш это интерфейс для взаимодействия с ОС. Ну, всё-таки больше, чем просто интерфейс. Это и способ автоматизации взаимодействий с системой, а это уже ЯП. Хотя нужно понимать, что в отличие от того же Пайтона он вызывает не функции из своих либ, а полноценные самостоятельные программы.
>>849983 >Вот ченджлог Прикрепи сюда ченджлоги всех утилит, использующихся в скриптах, начиная с coreutils и заканчивая всем, что используется в скриптах на самом деле, вплоть до imagemagick и прочих ffmpeg.
>>850278 Я выше и пояснял, что от баша, как от языка, много и не требуется, потому что вся логика распределяется по предметно-ориентированным языкам "команд", а его задача просто их соединить. >Ущербен как язык так и возможности оболочки. zsh практически ничем не лучше, а жертвовать совместимостью с де-факто стандартной оболочкой - башем - ради радуги и информации о погоде в строке приветствия как минимум глупо
>>850263 >Ну, всё-таки больше, чем просто интерфейс. бля, я имел в виду, в первую очередь это интерфейс для взаимодействия с ОС и только во вторую - это ЯП. Очевидно, блядь, что это не только интерфейс.
>>850173 >Но даже для такой операции как kill-region (аналог cut) по дефолту не назначен хоткей. Да ты что, мань? С-k не пробовал? А ведь есть ещё C-w и C-y, прикинь?
>>850261 >Например вместо "cd /home/Anon/porn/loli/" можно писать "/h/a/p/l". Меньше нужно печатать и работа идёт быстрее. ln -s /home/Anon/porn/loli loli
option="${1}" case ${option} in -f) FILE="${2}" echo "File name is $FILE" ;; -d) DIR="${2}" echo "Dir name is $DIR" ;; *) echo "`basename ${0}`:usage: [-f file] | [-d directory]" exit 1 # Command to come out of the program with status 1 ;; esac
>>850314 >Про ffmpeg это перебор, конечно. Если ты, например, хочешь написать "программу" (ну то есть что-угодно, лишь бы выполняло задачи), которая будет, скажем, на домашнем сервере проверять папку, в которую качаются торренты (ты для этого просто посылаешь ему, например, по почте .torrent-файл) на предмет новых видео, а потом, если находит видео, которое, например, содержит дорожку не того формата, который понимает твой ТВ, то перекодирует его в нужный формат и положит в отдельную папку, то тут самое простое будет именно какой-нибудь sh с ffmpeg. Это как модуль/либа/компонент/етц для работы с видео в других ЯП, только круче.
>>850280 >Я выше и пояснял, что от баша, как от языка, много и не требуется В нём нет даже сущности, соответствующей процессу или элементу пайпа. Мы не можем запустить в фоне несколько процессов, сохранить их "хендлы" в переменные, а потом сделать waitForAll, и чекнуть коды возврата. Для кодов возврата есть $? и $PIPESTATUS, где хранятся результаты только последнего пайпа (а их в команде может быть несколько). Есть wait, но он работает с PID, которые не уникальны для инстанса процесса, и могут переиспользоваться после его смерти. Именованных групп фоновых процессов, чтобы логически их объединять тоже не завезли. Но говноедам и так ок. >zsh практически ничем не лучше Идеологически не лучше, но эргономичнее.
>>850320 Пояснить разницу между регионом и строкой?
>>850369 Задолбаешься. Проще использовать обёртку вокруг ffmpeg для какого-нибудь скриптового языка.
Баш отлично подходит для написания всякой простой юниксоспецифичной хуиты (например, инит-скрипты) или в ситуациях, где надо написать скрипт для платформ, в которых кроме баша нихуя нет и быть не может, т.к. места для бидона/перла слишком мало (например, на роутерах). Написание мало-мальськи сложной логики на баше там, где можно заюзать что-то более человеческое, - садомазохизм и пустая трата времени.
>>849544 UNIX сложен и неприветлив только для виндузятников, т.к. они привыкли к тупорылым принципам своей венды.
>>850400 >В нём нет даже сущности, соответствующей процессу >но он работает с PID А другой сущности для идентификации процесса в POSIX и нет. >или элементу пайпа Чего-чего? >Именованных групп фоновых процессов А зачем они в баше? Это не ты тот хуй, которому многомерных массивов не хватало?
Отвечу в тред, пожалуй. Пока уебы одногруппники задротили всякую хуйню, я и братишка прочитали камелбук, маны по шеллу и нашли работу админами. Вот куда мамкиным вкатывальщикам надо смотреть.
>>850448 Ты опоздал где-то на 5 лет. Админская зарплата уже начала проседать где-то начиная с конца нулевых. А после обвала национальной бумажки сисадмин получает меньше самого обоссаного манагера, ибо последнему таки иногда поднимают зарплату
>>850572 Хуйню несешь. Норм админ - это стабильность, востребованность и низкий порог вхождения. Ну а если ты думаешь получать жабомакакой как господа в США, то боюсь тебя ждет разочарование. По поводу зп, не знаю как в пердях, но в ДС стабильно от 50к бублей и выше. Недавно видел вакансию где рукастому админу предлагают 120-160к в зависимосте от прямоты рук.
>>850440 >А другой сущности для идентификации процесса в POSIX и нет. И очень плохо. Баш, как процесс запускающий другие процессы, мог бы трекать момент их завершения с помощью обработчика сигнала SIGCHLD, и предоставлять пользователю действительно уникальный идентификатор запущенного процесса, состоящий внутри из пида и булевского флага завершён/не завершён. >Чего-чего? Один из процессов, объединённых в пайп. >А зачем они в баше? Чтобы можно было делать wait для выбранного подмножества фоновых процессов.
>>850590 >И очень плохо. Нет, не плохо. Просто ты не умеешь в юникс-вей. >мог бы трекать момент их завершения с помощью обработчика сигнала SIGCHLD А он его и отлавливает. Читай маны. >и предоставлять пользователю действительно уникальный идентификатор запущенного процесса А он какой предоставляет? ID как бы намекает на однозначную идентификацию >булевского флага завершён/не завершён. Зачем? Это ты и по PID'у узнать можешь. >Один из процессов, объединённых в пайп. Это звеном конвейера называется, а пайп - средство IPC, если что. Получить PID такого процесса тоже можно, но только зачем? >Чтобы можно было делать wait для выбранного подмножества фоновых процессов. wait $MY_NAMED_PROCESS_GROUP
>>850598 >А он какой предоставляет? ID как бы намекает на однозначную идентификацию Ты запускаешь процесс, запоминаешь его пид, он умирает, проходит какое-то время и другому процессу система назначает такой же пид. Ты проверяешь по пиду запущен ли твой процесс, видешь, что запущен и убиваешь его. Суть проблемы ясна? >Просто ты не умеешь в юникс-вей. Юникс-вей это молиться чтобы пид не был переиспользован? Парсить html грепом? Дампить объекты в плейнтекст, только для того чтобы сразу распарсить? >Получить PID такого процесса тоже можно, но только зачем? Я писал не про PID, а про код возврата. Мне кажется естественным, чтобы при асинхронном запуске процесса тебе возвращался future, с помощью которого можно проверить, запущен ли процесс, дождаться его завершения, и получить код возврата даже когда он давно завершён. PID не позволяет сделать последнего, и имеет описанную выше проблему. $? и PIPESTATUS это костыли, работающие только в тривиальных случаях. Вот простейший пример структуры пайпов с ветвлением: paste <(ls a) <(ls b). Как получить коды возврата ls a и ls b?
>>850227 Ящитаю, неверна твоя аналогия. Клей с блестками абсолютно ничем не пижже суперклея, и отличается от него исключительно внешним видом, но не функциональными возможностями. В случае с шеллами - это не так. Мнение "zsh - это тот же баш с цветными хипсторотемами", обосновано единственно популярностью oh-my-zh. В то время как в zsh, как я уже писал, хуева туча разных фич. Например, тот же рекурсивный глоббинг. Модификаторы для глоббинга. zmv. autopushd. Про автодополнение молчу. Да, эти вещи не относятся к "прожиточному минимуму" пользования шеллом. Но они действительно делают интерактивную работу в консоли немного приятнее. Различия языков тут ни при чем Ебал я эти различия, не имеет никакого смысла писать скрипты на чем-то, кроме sh, он МОЖЕТ делать все, что нужно, и этого достаточно. Но это не значит, что zsh - бесполезная хуйня.
>>850630 >Вот простейший пример структуры пайпов с ветвлением: paste <(ls a) <(ls b). Как получить коды возврата ls a и ls b? http://pastebin.com/Z5DUVLYq
>>850598 >Это звеном конвейера называется, а пайп - средство IPC, если что. Чтобы расставить все точки на 'и'. Речь идёт о пайлайнах в баше, где stdout одной команды направлен на stdin следующей через пайп, который средство IPC.
>>850630 >Суть проблемы ясна? Да. Ты пытаешься проецировать свой опыт применения win32 на unix. >он умирает И тут ты получаешь SIGCHLD ??? ПРОФИТ >Парсить html грепом? Почему бы и нет? Мне, например, лень из-за какого-то однострочника заморачиваться со специализированной утилиткой для разбора хтмл, проще задействовать подручный греп. >Дампить объекты в плейнтекст, только для того чтобы сразу распарсить? Текст - самый удобный для человека способ представления информации, к тому же, им легко манипулировать, потому что все утилиты 1) ориентированы на обработку текста 2) давно отточены временем. Ну и манипулировать объектами в шелле - нихуя не удобно, это порождает постоянную проблему преобразования объектов из одного типа в другой. Powershell тому доказательство. >Вот простейший пример структуры пайпов с ветвлением: paste <(ls a) <(ls b). Как получить коды возврата ls a и ls b? Хз, честно говоря, не представляю, когда это действительно может понадобиться. Обычно коды возвратов используются только в конструкциях вида a && c && d || b >>850639 Да, а тебе ещё что-то нужно? >>850695 >Например, тот же рекурсивный глоббинг. Модификаторы для глоббинга. Мне и обычного хватает, а для поиска есть find >zmv Ни о чем не говорит >autopushd alias cd=pushd? >Про автодополнение молчу Честно говоря, не вижу смысла этого дроча, чтобы запилить автодополнение абсолютно для всего. >Но это не значит, что zsh - бесполезная хуйня. Ну ок >>850712 С помощью пайпов (анонимных) они организуются в конвейер. Просто элемент пайпа - это скорее то, что через пайп посылается.
>>850715 >С помощью пайпов (анонимных) Не надо уточнять, что он анонимный, если мы говорим о пайпе, что создаётся системным вызовом pipe(). Это и так подразумевается. Именнованные пайпы в юниксе вообще называются FIFO, не перепутаешь никак. >Просто элемент пайпа - это скорее то, что через пайп посылается. У тебя какая-то каша в голове. Пайп - это объект, который аллоцирует 2 файловых дескриптора. На один обычно пишут, а с другого читают.
>>850732 Прочитал бы сначала на что отвечаешь. Тот товарищ назвал, как позже выяснилось, элементом пайпа звено конвейера, я его поправил. А как системный вызов pipe работает - я и сам знаю
>>850706 Почему не в переменные? >>850715 Описать конкретную проблему, следующую из отсутствия гарантий на уникальность PID - значит "проецировать свой опыт применения win32 на unix"? Я так не думаю. К тому же в винде есть та же проблема с PID-ами. >И тут ты получаешь SIGCHLD И как я узнаю от какого чайлда прилетел этот сигнал? Bash точно получает PID в обработчике сигнала, а получаю ли его я в обработчике, заданном trap-ом, хз. Может извернувшись и смогу, но не многовато ли мороки только для того чтобы надёжно узнать, завершился запущенный мною процесс или нет? >а тебе ещё что-то нужно? Предлагаешь идентифицировать группу процессов общим отцовским процессом? Можно, но костыльно имхо.
>>850702 Регион - это последовательная область символов между установленной меткой и текущей позицией курсора. В блокноте регион подсвечивается синеньким. Строка - это вся строка.
>>850840 А строка не является последовательной областью символов, которую можно выделить? В чём твоя проблема вообще? То выдумываешь, что хоткеев нет, то регион - это не строка.
>>850837 >Почему не в переменные? Потому что ls вызываются в отдельных процессах, и всё окружение сдохнет после их завершения. http://pastebin.com/uUKexC8R
>>850837 Ну, вообще-то, проблемы создаешь себе сам, пытаясь по привычки натянуть свитер через жопу. Ты лучше скажи, что (а не как) имеено ты хочешь сделать. Потому что чувствую, что ты делаешь это неправильно.
>>850846 Да блядь, вот есть у меня строка "пиздахуйджигурда", я хочу сделать "хуйпиздаджигурда". Я ставлю курсор между хуем и пиздой, ставлю метку с помощью Ctrl+@, перемещаюсь к концу хуя, и жму хоткей, соответствующий kill-region, жму Ctrl+a чтобы попасть в начало строки и Ctrl+y чтобы вставить хуй. Отлично. Вот только для kill-region хоткей не назначен.
>>850715 >Текст - самый удобный для человека способ представления информации Я за то чтобы человек работал с текстом. Но использовать отформатированный для человека текст в IPC это идея идиотская даже для конца 60-х. XML и JSON тогда не было (и поэтому в юниксе есть целый зоопарк форматов конфигов), но вполне существовал CSV. Большая доля юниксовых утилит занимается тем, что выводит данные с табличной структурой: ps, ls, lsof, mount, df, ifconfig, route, nmap, ffprobe, ... Представь, насколько была бы проще жизнь, если бы у Томпсона и Ритчи хватило яиц сделать стандартом вывод табличных данных в csv/tsv. И чтобы всё было в каноничной форме - числа без округлений, даты в виде таймстампов (ну или YYYY.MM.dd.hh.mm.ss), строки как есть. Тогда можно было бы написать утилиту заточенную на фильтрацию записей в CSV по значениям полей в каноничной форме, понимающую этот формат, например что первая строка это заголовки. А для красивого вывода данных в соответствии с заданной строкой формата написать отдельную либу. То есть чтобы по межпроцессным трубам тёк CSV с каноничными данными, а форматировалось и локализировалось всё только при окончательном выводе человеку. Данные и представление должны быть разделены. Пользователь должен иметь возможность настраивать представление. Вон в ls, ps и lsof навелосипедили возможность выбора колонок и их формата. Я, анон с харкача, заявляю: такая возможность должна быть везде, и её отсутствие - проёб.
Искать файлы фильтруя вывод ls -l должно быть так же удобно, как с помощью find-а. Но "Apr 16 00:18" не очень-то посравниваешь. Отфильтровать из вывода ifсonfig названия интерфейсов и их айпи должно быть просто. Но его автор разбил строки на несколько кусков чтоб красивее было. И соответствие 1 строка = 1 запись пиздой накрылось. Красота требует жертв. Даже простая команда touch " " ломает многие существующие скрипты. А всё потому что дампить объекты в плейнтекст только для того чтобы сразу распарсить это плохая идея.
>>851383 >Но "Apr 16 00:18" не очень-то посравниваешь. ls -l --time-style=long-iso У ls, как и любой другой команды, есть флажок для "машинообрабатываемого" вывода
>>851383 >XML и JSON тогда не было В чём твоя проблема? Я регулярками могу нагрепать 99% того, что мне нужно. Для 1% я подключаю однострочники перла. Если бы блядь всё было в XML и JSON - это был бы полный ад и израиль. JSON ещё можно было бы пережить, но чтобы парсить XML на каждый чих - это просто издевательство.
>>851394 >time-style=long-iso Дистрозависимая хрень. Прикрутили только когда набили шишек. >как и любой другой команды Не пизди.
>>851414 У тебя просто мужика^W утилиты для работы с xpath/jsonpath нормальной не было. С ними и искать в структурированных данных было бы проще, и можно было бы одной командой запихнуть настройку в нужную секцию конфига. Не говоря уже про валидацию по схеме.
>>851414 >Я регулярками могу нагрепать 99% того, что мне нужно. У меня прост случается баттхёрт когда html регулярками парсят. Почему до сих пор нет консольной утилиты для парсинга html? Ну или хотя бы для конвертации его в xml, чтобы дальше пустить в ход xpath.
>>851474 >Почему до сих пор нет консольной утилиты для парсинга html? Да ты охуел? xmllint уже была ещё в те времена, когда ты под стол пешком ходил, не говоря уж о всяких не входящих в стандартную поставку утилитках. xmllint --html --xpath '//img/@src' <(curl -s https://en.wikipedia.org/wiki/Hui_people) Но мне, например, проще незадумываясь написать >curl -s https://en.wikipedia.org/wiki/Hui_people | grep -oE '<img.?>' | grep -oP '(?<=src=").?(?=")' чем вспоминать, как пользоваться этим ебаным xpath
>>851570 О, не знал про --html. Я думал для xmllint надо конвертить html в xml. Пробовал делать это tidy, но оно слишком сырое. Ладно, допустим я чутка охуел.
>>851474 >У меня прост случается баттхёрт когда html регулярками парсят. Одно время писал парсеры для сайтов на перле с регулярками. Всё заебись было. Строить целое дерево, чтобы вытащить несколько полей - это абсолютно бессмысленная трата ресурсов и усложнение задачи, когда парой регулярных выражений ты можешь вытащить всё, что тебе нужно, какой бы кривой и поехавшей не была разметка.
>>850579 >стабильно от 50к бублей и выше Недавно знакомый искал себе помощника, рассказывал про резюме, в котором типичный не сверх-прокачанный, но знающий админ с запросом в 50к, комментировал, что "подозрительно мало хочет, его навыки это 80+". >>850630 >Юникс-вей это молиться чтобы пид не был переиспользован? Зная PID ты можешь получить PPID и командную строку, если боишься. Хотя обычно таких проблем не возникает при правильной организации скрипта. Ещё раз повторю, что уже не раз сказано: шелл это не си, не руби, не питон и не перл, шелл это даже не бач/вбс для линуксов, шелл это шелл. И писать на нём как на си не надо. >>850903 Только не ">", а ">>". Хотя, смотря, что тебе надо.
>>852261 > Только не ">", а ">>" Это не было руководством для дебилов, которые копируют команды в консоль, не понимая, что они делают. Если ты так переживаешь, что какой-то долбоёб, используя мою команду, затрёт свой исходный ~/.inputrc, то могу тебя заверить, что, скорее всего, у него этого файла вообще не было изначально.
>>852261 >PPID и командную строку Да уж лучше в качестве ID использовать пару PID+время запуска. Не подскажешь, как в ps время старта процесса в виде таймстампа вывести? >шелл это шелл. И писать на нём как на си не надо. Забавно, в rc использовали c-подобный синтаксис, и получилось намного аккуратнее bash. Но тоже хуйня. Шелл в виде комбинации неполноценного языка и неполноценного текстового редактора нинужен. Shell done right это текстовый редактор с реплом для скриптового языка. Адекватные люди со временем переселяются в vim/emacs и т.п. И это правильно, потому что всякий ввод текста должен происходить через текстовый редактор, а программирование на языке программирования.
>>852407 >неполноценного языка и неполноценного текстового редактора нинужен. Потому, что, блядь, это не язык программирования и не текстовый редактор, маня! Текстовые редакторы это vim, emacs, на худой конец - nano, если ты совсем чайник. Язык программирования для никсов это в первую очередь pure C (можно C++), а sh - инструмент управления системой, организации работы программ. Не понимаешь? Ну, если не понимаешь, то не трогай линукс, а значит ВОН ИЗ ПРОФЕССИИ. Умение пользования шеллом - обязательное требование для админа и если ты не способен его осилить, то ты не сможешь работать админом. Зато сможешь дальшн заправлять картриджи для тёток из бухгалтерии.
>>852658 Крутая конфа. Продуманная. Мне особо понравился живой дебаггинг презенташки с подгоном разрешения в прямом эфире. По сути. Знаешь, сколько этих шеллов существует? И один круче другого. Но правильные админы по-прежнему пишут под sh, не очень правильные - под bash (благо они очень похожи). Почему есть zsh и даже шеллы с более серьёзными ЯП: csh, Python shell, irb, а используется sh. Потому, что они есть везде, а другие, насколько бы фичастыми не были могут оказаться бесполезными. Ты знаешь, например, куда делся dash? Был неплохой фирменный дебиановский шелл, но сейчас на моём дебиане по-умолчанию работает bash, хотя специально я его не ставил и не выбирал. Потому, что bash есть почти везде, под него ты найдёшь кучу скриптов на все случаи жизни. В том же, что за пределами твоих пары серваков чего-то менее стандартного типа бельчачьего шелла ( http://squirrelsh.sourceforge.net/ ) есть люди, которых достаточно, чтобы они начали делиться приёмами, ты не можешь быть уверен от слова СОВСЕМ. И не важно ,что он умеет на самом деле. Важно, что в 2016-м перед тем, как написать свой скрипт принято искать готовые решения, а не изобретать велосипеды. Кого-то это устраивает, кого-то не очень, но в наши дни скорость разработки важнее скорости работы и многого другого, а максимальная скорость разработки - это взять готовое.
>>852880 По своей сути шелл это репл к одноимённому языку. Тьюринг-полному языку программирования с переменными, условными выражениями и циклами, специализирующемуся на управление процессами. Не понимаю как это можно отрицать. Как репл он конечно же включает текстовый редактор для ввода и редактирования команд. Да, это неполноценный текстовый редактор, но такие функции как навигация по тексту и базовое редактирование в нём есть. Точно так же ide, почтовые клиенты и чатики содержат текстовые редакторы. Поле, в котором я это набираю это тоже текстовый редактор. Если эта идея слишком абстрактна для тебя - так и скажи, не буду больше мучать.
Мой тезис в том, что для "управления системой, организации работы программ" надо было не писать велосипед, а доверить это полноценному редактору и языку программирования, в соответствии с принципами юникса. В текущем виде шелл это прога, которая выполняет много функций и делает это плохо. В баше есть даже vi mode и emacs mode для включения хоткеев как в них. Разработчики поняли желание пользователей редактировать текст в привычной среде, но не сделали следующий логичный шаг.
>>853053 Он вообще не удобен для программирования, я гарантирую это. Я честно пытался на нём писать какие-то скрипты, т.к. на фряхе он был по дефолту, но это абсолютно бессмысленное занятие. На той же фряхе csh юзался вот именно что только для интерактивной работы, все init скрипты написаны на sh.
Почему оно такое неприветливое?
Каковая сейчас обстановка в написании сценариев linux? Нормальные люди используют perl/python?