Как перестать писать плохой код на Bash практические советы


Оглавление (нажмите, чтобы открыть):

Как перестать писать в лог файл в BASH?

Я использую этот код для записи всех выводов терминала в файл

Как сказать это остановить? Если, например, я не хочу, чтобы какой-то вывод попал в журнал .

Не совсем ясно, какова ваша цель здесь, но здесь есть что попробовать.

Знаете ли вы об утилите script ? Вы можете запустить script myTerminalOutputFile и любые команды и выходные данные после этого будут myTerminalOutputFile в myTerminalOutputFile . Недостатком является то, что он захватывает все. Вы увидите забавные символы управления экраном, такие как ^[[5m;27j . Так что сделайте быстрый тест, чтобы увидеть, работает ли это для вас.

Чтобы завершить захват вывода, просто введите exit и вы вернетесь к родительской оболочке cmd-line.

Предупреждение: проверьте man script для получения подробной информации о присущей ему конкретной версии скрипта вашей ОС. Некоторые лучше, чем другие. script -k myTerminalOutputFile может работать лучше в этом случае.

Написание комментариев в скриптах Bash

Еще один способ улучшить читабельность вашего кода – использование комментариев. Комментарий – это понятное человеку объяснение или аннотация, написанная в сценарии оболочки.

Добавление комментариев к вашим сценариям Bash сэкономит вам много времени и усилий, если вы посмотрите на свой код в будущем. Допустим, вы хотите изменить сценарий, который вы написали несколько месяцев или лет назад. Скорее всего, вы не вспомните, почему написали какой-то сложный фрагмент кода, если не добавили комментарий.

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

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

В этой статье мы рассмотрим основы написания комментариев на Bash.

Написание комментариев в Bash

Bash игнорирует все, что написано после хеш-метки ( #) в строке. Единственное исключение из этого правила – первая строка в скрипте начинается с #!символов. Эта последовательность символов называется Shebang и используется, чтобы сообщить операционной системе, какой интерпретатор использовать для анализа остальной части файла.

Комментарии могут быть добавлены в начале строки или встроены в другой код:

Пробел после хеш-метки не обязателен, но он улучшит читабельность комментария.

Обычно, когда скрипт открывается в текстовом редакторе , комментарии отображаются зеленым цветом.

Комментарии также полезны при тестировании скрипта. Вместо удаления некоторых строк или блоков вы можете закомментировать их:

Многострочные комментарии в Bash

В отличие от большинства языков программирования, Bash не поддерживает многострочные комментарии.

Самый простой способ написать многострочные комментарии в Bash – добавить отдельные комментарии один за другим:

Другим вариантом является использование HereDoc. Это тип перенаправления, который позволяет передавать несколько строк ввода в команду. Если блок HereDoc не перенаправлен в команду, он может служить заполнителем многострочных комментариев:

Использование HereDoc – это хак, а не настоящий встроенный способ написания многострочных комментариев Bash. Чтобы избежать каких-либо проблем, вы должны использовать однострочные комментарии.

Заключение

Написание комментариев является хорошей практикой и помогает другим разработчикам, в том числе будущему самому, понять сценарий оболочки. В Bash все после хеш-метки ( #) и до конца строки считается комментарием.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

КОНСОЛЬНЫЕ ХИТРОСТИ В BASH

Запись и воспроизведение в консоли.
Все привыкли пользоватся скриншотами и записью видео
с экрана. Я даже встречала мануалы как делать скрины в голой консоли.
Хочу поделится с вами интересным способом как делать «настоящую»
видеозапись с консоли без лишних движений. Выполните для примера следующие команды
в терминале:

Пояснение к этому смотрите в коментариях.

Есть еще тулза на питоне можно смотреть видео в браузере

Комментарии

    nezabudka, очень интересная вещь, положил в закладки.
    Единственное, что расстраивает — получившийся ролик не так просто читать вручную — там много мусора, а если включить что-нибудь, занимающее всё видимое пространство (например vim), и полистать, мусора становится ну очень много. Я конечно понимаю, что это всё сделано для возможности последующего проигрывания, но хотелось бы иметь возможность записывать только введённые команды.

    В общем, спасибо за информацию, полезная штука

    Запись от tezaurismosis размещена 30.03.2020 в 18:24

    $». Так вот в обеих случаеях в фильтре должны быть только логин@машина и
    в зависимости от требуемого вывода наличие квадратных скобок.
    Можно упростить, у меня работает даже так ‘/nez/’ и ‘/[nez]/’ и так ‘/rox/’ и ‘/[rox]/’ и даже
    выводит участки кода выполненные из под root
    Можно включать запись, устанавливать приложение, настраивать и таким вот образом по окончании перенаправлять
    все в фойл, фактически выкинув все лишние интервалы времени и можно делится с форумчанами. Спасибо за
    хорошую подачу, теперь это действительно стало удобно.
    Обнаружила такой фильтр методом тыка, сама объяснить как он работает не могу, буду рада
    любым замечаниям по этому поводу.

    5 пунктов о том, как хорошо писать плохой JavaScript

    Вот такая забавная заметка о том, как писать плохой JavaScript. Была навеяна мне некоторым куском JS’а, который попался мне на глаза на днях. Данный пост не претендует на полноту и охват всего и вся, но тем не менее содержит некоторые примеры плохого кода на JavaScript.

    Конечно в инете уже полно такого рода статей, но вот и я тоже решил внести свой вклад. В конце концов, чем больше будет таких статей, тем больше вероятность, что их кто-то прочитает и может быть сделает для себя выводы.
    Вообще, мое личное мнение, что прежде чем начать делать какие-то практические вещи, надо все-таки иметь теоретические знания в данной предметной области. И если вы хотите писать на JavaScript, не надо думать, что если вы знаете, скажем, C++ или C# не дай бог, то значит вы знаете JavaScript. Это язык со своими особенностями и заморочками, и хорошо бы, прежде чем начать писать на нем, представлять себе как работает интерпретатор JS, как резолвятся переменные, что такое цепочки вызовов, как устроены замыкания, прототипы. На эти темы в сети полно материалов, я бы посоветовал просто в обязательном порядке посмотреть выступления (лучше все) Дугласа Крокфорда из Yahoo! Это просто Бог JavaScript’а. Каждый раз, когда смотрю его выступления, поражаюсь фундаментальности и системности мыслей этого человека. Его выступления можно найти в Yahoo UI Theatre. Там же можно найти материалы от другого, не менее интересного человека в области JavaScript, Николаса Закаса. Он является ведущим фронтэнд-разработчиком в Yahoo! и регулярно выступает на всех конфреренциях и рассказывает про оптимизацию фрондэнда и вообще много других интересных вещей. Кстати, к вопросу о переходе с других языков, есть отличная статья «How Good C# Habits can Encourage Bad JavaScript Habits» про то, как хорошие манеры в C# могут сослужить плохую службу при написании JS-кода, советую почитать. Так же есть, на мой взгляд, отличная статья JavaScript Closures от Ричарда Корнфорда , в которой описано как происходит резолвинг свойств объектов и переменных, что такое контекст выполнения и цепочки вызовов и конечно же что такое замыкания и с чем их едят ��

    Такс, что-то я ушел в сторону, вернемся к теме.

    Пункт номер раз. Делайте как можно больше глобальных переменных!

    Зачем нам нужны локальные переменные! А вдруг какая-нибудь переменная нам понадобиться в другом месте? А ее нет. Не пойдет! Поэтому забываем про слово «var» и все наши переменные, не объявленные через var становятся глобальными переменными. Тогда и в случае выполнения какой-либо функции при обращении к переменной, интерпретатор сначала пойдет ее искать в локальных переменных данной функции — не найдет, потом перейдет к контексту выполнения, в случае если эта функция вызывалась не из глобального контекста, то интерпретатору придется пройтись по длинной цепочке вызовов, пока не дойдет до глобального и только там он найдет нашу переменную. Отлично!

    Пункт номер два. Не надо кэшировать какие-либо объекты в локальные переменные!

    Вообще этот пункт идет в противоречие с первым пунктом, так что его можно обощить до «Не надо вообще кэшировать DOM-объекты в переменные». Если вдруг вам в одной функции надо, скажем, много раз поманипулировать каким-нибудь DOM-объектом, ни в коем случае не делайте так:

    Как перестать быть жертвой: практические советы от психотерапевта

    Позиция жертвы приводит к тому, что человек перестаёт играть решающую роль в собственной жизни. Психотерапевт Уэйн Дайер в своей книге «Как избавиться от комплекса жертвы» рассказывает, что предпринять, чтобы вести себя как свободная личность уже сегодня.

    Психотерапевт, автор книги «Как избавиться от комплекса жертвы» и ещё 30 работ о саморазвитии и психологии личности.

    Что значит быть жертвой

    Эти признаки помогут понять, что вы занимаете положение жертвы.

    1. Вы не контролируете собственную жизнь

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

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

    «Как избавиться от комплекса жертвы»

    2. Вы действуете с позиции слабости

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

    3. Жизнь не работает на вас

    Если кажется, что вы тратите все силы и время, чтобы угодить другим, вынуждены подстраиваться и делать то, что не нравится, из чувства долга — вы в позиции жертвы.

    4. Тревожность и самоуничижение — ваши спутники

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

    Альтернативное поведение: свободная и сильная личность

    Противоположное комплексу жертвы состояние — свобода личности.

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

    «Как избавиться от комплекса жертвы»

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

    «Самыми свободными в мире являются те, кто находится в согласии с самими собой: они просто не обращают внимания на претензии других людей, поскольку сами эффективно обустраивают и направляют свои жизни», — пишет Уэйн Дайер в своей книге.

    Как выйти из положения жертвы

    Выполните всего две важные рекомендации.

    1. Поверьте в свою значимость и отстаивайте её

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

    2. Начните вести себя как сильная личность

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

    Практикуйте уверенное поведение в повседневных ситуациях

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

    Вот несколько советов, которые можно применять на практике ежедневно.

    1. Перестаньте спрашивать разрешения у других

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

    Прямо заявляйте о своих законных требованиях или открыто сообщайте о намерениях. Вместо вопроса «Можно мне обменять товар?» ставьте продавца перед фактом: «Я хочу вернуть деньги за костюм, он мне не по размеру». Не стоит спрашивать партнёра, можно ли пойти на вечеринку или на футбольный матч. Сообщите о своих планах прямо, без оправданий и виноватого тона.

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

    2. Демонстрируйте уверенность в разговоре


    Смотрите собеседнику в глаза, говорите чётко, без долгих неуверенных пауз и междометий, не ходите кругами. Очень важна поза и мимика. Стойте ровно (сутулость — признак неуверенного человека), не гримасничайте, избавьтесь от нервных жестов.

    3. Не помогайте людям, если не хотите

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

    4. Не бойтесь говорить о себе и делиться с другими людьми

    Жертвы часто подбирают каждое слово и боятся, что любая информация будет использована против них. Не изводите себя опасениями такого рода. Многолетний страх проявить свою настоящую натуру на публике приводит к тому, что вы забываете, кто вы на самом деле и чего хотите.

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

    Конечно, информация должна соответствовать ситуации и степени доверия между собеседниками. Не уходите в крайности. Умение соблюдать баланс — ещё один признак сильной личности.

    5. Требуйте качественного выполнения услуг, за которые платите

    Проверяйте чеки в магазинах, счета в ресторанах, сроки годности и сохранность товара. Если вы не удовлетворены качеством услуг, не стесняйтесь требовать замену или компенсацию. Не позволяйте людям, которым вы платите, превращать вас в жертву. Не стоит отмахиваться и молча уходить из магазина или ресторана — требуйте качественного обслуживания, замены блюда или возврата денег.

    Изучайте свои права потребителя и пользуйтесь ими. За свои деньги вы имеете право получить хороший товар или вкусную еду. Это не значит, что вы должны спорить и устраивать скандалы при любом случае. Клиент всегда может проголосовать рублём — просто отказаться платить за плохой сервис или испорченный товар. Ходить в ресторан или магазин, в котором вас ни во что не ставят, — удел жертвы.

    Чтобы раз и навсегда попрощаться с ролью жертвы, достаточно принять твёрдое решение взять свою жизнь в собственные руки. Самостоятельность, уверенность, ощущение собственной значимости — вот основа поведения свободного человека. Если вы решили воплотить это в жизнь, то книга Уэйна Дайера «Как избавиться от комплекса жертвы» станет отличным подспорьем.

    Стоит ли изучать bash?

    Короткий очерк. Вообще об эту тему поломано немало копий. Большинство людей, когда слышит про Linux, начинают заводить разговор типа «фу, консоль, прошлый век». А между прочим там есть мощнейший язык сценариев, который «был питоном задолго до того, как это стало мейнстримом», т.е при сравнительно невысоком пороге вхождения позволяет оптимизировать и автоматизировать все и вся. Ну, как без примера? Вот однострочный скрипт, который выжимает данные с популярного трекера в формате:

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

    Может я и говорю очевидные вещи, но тем не менее. Изучать стоит.

    Дубликаты не найдены

    Топик следовало бы назвать «стоит ли изучать регулярки», так как вся мощь скрипта строится на их использовании в грепе и седе.

    Присоединяюсь ко всем предыдущим комментаторам — от bash тут ровно одна вертикальная палочка | , все остальное это отдельные программы curl, grep и sed которые отлично работают и без bash.

    Изучать надо потому что bash недалеко ушел от sh. Везде где есть Linux (компы, телефоны Android, домашние маршрутизаторы, домашние кофеварки), там есть и sh, а вот всяких zsh и тем более красивых окошек (Xorg) может не быть никогда.

    Я отвечу тебе и всем остальным комментаторам — баш — это оболочка со встроенным языком сценариев, предназначенная как раз для взаимодействия с такими программами, как curl, grep и sed. Собственно говоря, и эти программы в свою очередь предназначены для взаимодействия с шеллом.

    Я не очень понимаю, если честно, почему всяк сюда входящий считает своим святым долгом указать на их наличие в этом скрипте, когда в посте есть рекомендация ознакомится с данными утилитами.

    потому что баш в частности и шелл в целом — это не одно и то же. Баш — это одна из реализиций шелла как такового и интерпретатор команд.

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

    Автор в курсе, что в его примере тупо связка внешних утилит по средствам баша? Такое себе докозательство мощи и удобства его, как языка программирования именно )))

    +1 к мысли о том что надо различать однострочники и небольшие скрипты,для которых баш удобен и мастхэв вообще, и достаточно объемные и сложные вещи, которые убиться можно писать на нём.
    Я на самом деле не догнал сути вопроса поднятого в посте. Если ты часто и много работаешь с линуксом, то ты в любом случае пользуешься терминалом и автоматизируешь что-то
    Аналогично если тебе оно нафиг не надо ни под каким соусом (например, потомственный повелитель виндоус серверов), то такие вопросы в принципе не возникают. Непонятно короче)

    Аналогично если тебе оно нафиг не надо ни под каким соусом (например, потомственный повелитель виндоус серверов)

    Под виндой есть powershell, и он гораздо мощнее, чем bash.

    как это связано с тем что баш в данной ситуации не нужен?

    Какая разница, есть они или нет, если ими никто не пользуется, соответственно нет никакой экосистемы вокруг них?

    Из популярных только bash, и кое-кто еще zsh пользуется, но хер в нем даже команды как в bash запустишь: экранирование другое, приходится переписывать.

    шебанг для лохов?

    Автор в курсе, что в его примере тупо связка внешних утилит по средствам баша? Такое себе докозательство мощи и удобства его, как языка программирования именно )))

    Тебе русский — не родной?

    Зачем два грепа? Все одним сед-скриптом можно сделать.

    А по теме, что там учить то? Но скрипты на нем действительно сложнее поддерживать чем питон.

    Сед вообще Тьюринг-полный, но это не значит, что на нем надо делать все.

    Учить там действительно много не надо, но азы знать неплохо. Вся соль в том, что на нем можно очень быстро что-то сравнительно небольшое написать. И тот же grep —help гораздо быстрее глазами пробежать, чем почитать доки к очередной питоновской библиотеке. Можно даже 10 раз grep вызвать, если это улучшит читаемость регэкспов.
    Хотя у питона и производительность, и ограничений меньше, но и он в каком-то смысле является просто «клеем» для сторонних библиотек. Больше того, т.к эти библиотеки часто сишные, я представляю, как начинающим питонщикам больно спускаться с небес на грешную землю статической типизации.

    При этом:
    1. баш — вполне себе клей для юникс-утилит по типу grep/sed/ls/you name it
    2. в питоне неплохая стандартная библиотека, использующая в некоторых случаях те самые нативные юникс-утилиты под капотом — но с более удобным и читабельным апи
    3. несмотря на сишность многих питон-библиотек, в 99% случаев питонисты си-код не видят и статическую типизацию не трогают

    Ну баш это все-таки шелл -а не язык программирования. Не КМД виндоуса конечно, но все же . Ну не простых, а по большей части системы. (инит скрипты различного рода)

    Bash хорош, ебашь чё хош!

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

    Уж лучше полноценные языки типа Питона

    Бар подходит для простых скриптов, не больше

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

    А если будете знать, то просто сразу напишете.

    И не обязательно python: ruby, php или js будут не хуже. У каждого есть свои плюсы и минусы.

    Если мне нужно делать то, для чего хватает ls, sed, mv, cp и запуска линуксовых демонов и с чем успешно справляется уже имеющийся bash — зачем мне не-нативные ruby или php, которые обьективно в разы сложнее?

    Просто какая-то перепись желающих забивать гвозди микроскопами в комментах.

    Просто какая-то перепись желающих забивать гвозди микроскопами в комментах.

    Не надо возводить всё в абсолют.

    Я не против bash, сам его использую.

    Но я против bash для чего-то сложнее пары строк.

    Если человеку на изучение python с нуля нужно кучу времени, но он хоть сколько-нибудь знает bash безо всякого его целенаправленного изучения — а просто потому что пользуется linux-дистрибутивом, то аналогичного результата при выполнении скрипта пусть хоть в 20-30 строк он добъётся с bash быстрее, т.к. уже есть определённая база и понимание.

    И все доводы, что python / ruby / php лучше здесь вряд ли актуальны. Да, лучше. Но зачем мне учиться новому для меня инструменту, особенно, если я не программист, если понятный и простой инструмент уже решает мои задачи, пусть в 30 строк, а разницы от перехода на новый инструмент я не увижу, а только потрачу время?

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

    Если предполагается написание, то подразумевается человек с навыками администратора, а он точно будет знать хотя бы один скриптовый язык (либо, если он ещё новичок, активно учит его).

    TL;DR: диалог стал неинтересен, переливать из пустого в порожнее бессмысленно.

    Я вот прямо как наяву вижу ноду, двести мегабайт node_modules и gulp, выполняющих элементарный парсинг из ОП 🙂

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

    А если не понадобятся, то у вас будет просто один голый файл.

    Без него или php или perl не получится, ибо они не ограничены в возможностях

    А баш ограничен

    По сложности изучение оно все похоже

    Разумеется, баш ограничен.

    Вот только рекомендовать изучать сразу питон, если большинству с головой хватит для своих повседневных задач bash — это очень странно.

    Это примерно как «да зачем тебе калькулятор, он же ограничен, давай сразу на Tiānhé-2 учиться считать».

    Тот кто изучил баш уже выучил и остальные языки, так зачем тратить время, можно сразу учить чтото нормальное ?

    Баш это лишь бонус

    изучать баш или нет зависит от того хочешь ты стать инженером или нет. если ты всего-лишь программист на питоне, то не стоит.

    Ну для скрипта как правило достаточно базовых возможностей питона

    Когда приходится работать с массивами или обработкой текста баш сразу становится не нужным

    Что же касается библиотек на С, то все решается установкой gcc 🙂

    Когда приходится работать с массивами или обработкой текста баш сразу становится не нужным

    Пайп в баше связывает ввод-вывод двух отдельных процессов, запуская их параллельно, максимально утилизируя процессорное время.

    «bzcat file | grep «blablabla» | sed . | bzip2 -z > result»
    Этот однострочник задействует как минимум 4 ядра.

    Как такое компактно написать на python? Привет GIL!

    Компактно нет, но возможностей больше, а геморроя меньше

    В питоне есть не только gil, и там все с многопроцессностью хорошо

    Ну так я и прошу показать, насколько хорошо. Приведите пример хотя бы 3 потоков с простым пробросом данных.

    Для того же, для чего и везде — для повышения производительности.


    ➜ linux git:(acc27b6aad70) ✗ time taskset -c 0-7 sh -c «grep -R linux | awk ‘‘ | gzip > file»
    taskset -c 0-7 sh -c 1,84s user 0,43s system 156% cpu 1,459 total
    ➜ linux git:(acc27b6aad70) ✗ time taskset -c 0-0 sh -c «grep -R linux | awk ‘‘ | gzip > file»
    taskset -c 0-0 sh -c 1,57s user 0,41s system 99% cpu 1,983 total

    Разница в 30% существенна. И тут всего лишь 3 процесса.

    Никогда не встречал задачи где надо много потоков и имела значение скорость
    Разве только архивация

    Если же нужно выжать из проца все, опять же питон, он намного больше умеет с потоками

    Никогда не встречал задачи где надо много потоков и имела значение скорость

    Изучить стоит. Всегда пригодится для того, чтобы на коленке собрать что-то на 1-2 строки.

    Если же вам надо более пары строк, то вы просто неправильно выбрали инструмент. Баш для таких задач отвратительный выбор.

    Если же вам надо более пары строк, то вы просто неправильно выбрали инструмент. Баш для таких задач отвратительный выбор.

    Да, я тут, кстати, Unreal Engine 4 потихоньку на баше переписываю. И сейчас начали закрадываться сомнения.

    Некоторые пишут многостраничные скрипты по установке ПО на линукс, развертыванию приложений, мониторингу, сложные системы сборки и т.д.

    Bash плох для таких задач.

    Что роднит пикабу с опесорс сообществом — так это неадекватное восприятие информации.

    Кто-то тут видит призывы писать мегабайтные скрипты, хотя я намеренно привел максимально небольшой скрипт с более-менее реалистичным сценарием использования. Кто-то усмотрел крамолу в использовании утилит, в командной то оболочке. Типа «как же так, нечестно, ты тут из лука стрелами стреляешь, а без них попробуй ка».

    Ну здесь я точно как дома.

    * Connected to mega-tor.org (46.148.17.230) port 80 (#0)

    Что значит «изучать»? А когда тебе купили первый комп, нужно изучать клавиатуру и мышь? Без них никак же.

    Так и без консоли, на мой взгляд, в линуксе никак, если тебе нужно хоть что-то чуть бОльшее, чем браузер и текстовый редактор.

    А после того как используешь хоть несколько консольных утилиток, появится естественное желание, например, в выводе команды «ls» «грепнуть» что-то. А потом на каждом из этих файлов xargs’ом что-то запустить. Ну и понеслось!

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

    Многие любят zsh. (но это опять не язык программирования)

    Добавлю свои пять копеек. Люблю аудио книги, чуть меньше чем ебаться) В общем очень. Но вот беда бывает такая, что громкость некоторых книг ну совсем не очень, если ехать в общественном транспорте то даже на макс громкости плохо слышно. Под виндой, например, приходилось искать конвертеры(стараться не цепануть вирус и Амиго браузер) и прекодировывать дорожки с повышением уровня громкости, ох и еботня же это была, особенно если там > 50 дорожек.
    Нашел для себя решение под Linux(малинка в качестве сервера работает 7/24) всего в двух строчках кода, а именно:

    1. #cd the_best_audiobook //переходим в каталог с книгой
    2. #for file in *; do wc -l $file; lame —scale 8 $file; done //перебираем все файлы и поднимаем громкость в 8 раз.

    А так — да, в КС в консоли играть не удобно и это прошлый век.

    Неправильный, но быстрый способ стать программистом

    Содержание статьи

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

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

    Разумеется, речь в статье пойдёт исключительно о моём личном опыте, который позволял мне проходить собеседования даже в такие топовые компании, как Luxoft.

    Как я стал программистом

    С компьютером я впервые познакомился в 6 лет. В 13 лет у меня уже был свой персональный веб-сайт. В школе учился плохо, в универе тоже. На втором курсе мой друг нашёл работу Java-программистом и настоятельно рекомендовал мне сделать то же самое. Идея заинтриговала. Нужен был план.

    Первый шаг — резюме

    Первая и основная проблема, с которой сталкиваются новички, — резюме. Без адекватного, цепляющего резюме тебя не будут приглашать на собеседования. Но как быть тем, у кого совсем нет опыта работы? Для того чтобы «не с пустыми руками» идти к HR, мы с другом вписали мне в резюме целый год опыта работы над его проектом, над которым якобы вместе трудились.

    Зарплатная политика

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

    Позор и стыд

    Первые собеседования были провальными. Надо мной буквально смеялись. На первом же техническом собеседовании, где мне дали пару задачек на бумаге, меня раскусили в два счёта. Кто-то даже по-отечески посоветовал книгу Thinking in Java.

    Первая работа

    В конце концов меня пригласили на собеседование в филиал одной датской компании, где я ответил на фундаментальные вопросы и приятно удивил всех своим английским. Меня взяли на должность Junior Java developer с одним условием — первые три месяца я буду проходить курс SCJP (Sun Certified Java Programmer), который восполнил бы мои пробелы и выковал бы из меня более подготовленного специалиста. Что может быть лучше, чем оплачиваемая стажировка без нужды работать (выдавать свою некомпетентность)? В этой компании я проработал полгода, чтобы через несколько месяцев пойти на повышение в компанию покрупнее.

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

    Рекомендации для начинающих программистов

    1. Резюме. Оно должно быть правильно отформатированным и написанным исключительно на английском. Если не хватает опыта, то его можно (и нужно) придумать, но следует подготовиться отвечать за каждое написанное в резюме слово. Например, если у тебя там написано JMS (Java Message Service), то как минимум следует пройти хоть одну обучалку и поиграться с JMS, поделать какие-нибудь примеры, пускай это и будет банальное «Hello, world!». Теперь будет удобнее пускать пыль в глаза, вы ты и правда «работал с JMS».
    • Выучи азбуку программирования. Если ты ещё можешь позволить себе «плавать» на глубоких уровнях каких-нибудь комплексных технологий вроде Struts и Spring, то неправильные ответы на элементарные вопросы тебе никогда не простят. Если тебя ночью разбудить, то ты должен уметь рассказать про ООП, наследование, инкапсуляцию, полиморфизм и другие базовые концепции, а также суметь объяснить это всё на примерах.
    • Практика. Научиться программировать можно, только лишь программируя. Это больно и неприятно (если ты не программист), но другого пути нет. Единственный способ перестать бояться задачек на собеседованиях — порешать их дома самостоятельно.
    • Читай книги и проходи туториалы по Java только на английском Абсолютно все термины программирования проще понимать на языке оригинала, то есть на английском. Читать техническую литературу по Java на русском — себя не уважать. Почему? Потому что, чтобы понимать что-нибудь в духе «…модуль таблицы во многих смыслах представляет собой промежуточный вариант, компромиссный по отношению к сценарию транзакции и модели предметной области», нужно быть поистине гением, которым ты вряд ли являешься.
    • Выучи, наконец, английский! В первую очередь это касается разговорного английского. Сложно сосчитать то огромное количество толковых программистов, которых на моей памяти забраковали по одной единственной причине — неудовлетворительный уровень разговорного английского. Нет, если ты, конечно, собираешься работать программистом где-нибудь в отечественной компании, то твой уровень языка не будет играть важной роли. Но если ты хочешь попасть на работу в международную компанию, то сам бог велел выучить язык. Уровень твоего английского будет конвертироваться в дополнительные сотни долларов прибавки к зарплате.
    • Знай рынок. Походи по вакансиям, почитай требования, поспрашивай друзей-программистов, сколько они получают. Используй сервисы, которые позволят составить более полную картину о рынке IT. Ты был бы удивлён, узнав о том, насколько велико количество талантливых программистов, которые получают в два раза меньше, чем могли бы, только лишь по причине своей лени и нежелания держать нос по ветру.
    • Торгуйся. Нет ничего предосудительного в том, чтобы торговаться за зарплату. Твоим аргументом в споре может быть как хороший английский, так и предложение о работе в другой компании. Последний аргумент особенно хорошо работает: «Да, но мне в Luxoft предлагают на 300 долларов больше, почему я должен соглашаться на ваши условия? Может, мы могли бы найти компромиссный вариант?». В своё время мне пару раз удалось выторговать дополнительную сотню долларов к своей зарплате, и через год эта сотня долларов дала мне дополнительные 1 800 долларов дохода на ровном месте. Ты должен понимать, что даже для небольших зарубежных IT-компаний лишняя сотня баксов как капля в море.
    • Найди себе ментора. Хорошо, если у тебя будет более опытный товарищ, который сможет помочь советом и ответить даже на самые глупые вопросы. Благодаря его опыту и моральной поддержке ты будешь продвигаться в программировании быстрее, чем в одиночку. Если нет ментора, то неплохо сходить на какие-нибудь курсы по программированию, которые не только дадут более полную картинку того, чем занимается программист, но и позволят познакомиться с более опытными людьми. Кто знает, может быть, кто-нибудь из них захочет стать твоим ментором.
    • Начни свой проект. Даже если он будет образцом самых худших практик кодинга и ты его никогда не закончишь, по крайней мере, у тебя будет то дело, ради которого захочется разбираться в программировании и изучать новые технологии. Кроме того, у тебя появится дополнительная тема для задушевных бесед на собеседованиях.
    • Ищи работу летом. Во-первых, когда все в отпусках, в компаниях более остро ощущается нехватка кадров и повышается вероятность того, что тебя позовут на собеседование. Во-вторых, поскольку твои конкуренты-соискатели тоже на отдыхе, у тебя опять-таки повышаются шансы быть замеченным HR.
    • Никогда не сдавайся. Даже если кажется, что ты заваливаешь собеседование, важно проявить стойкость и продолжить попытки решить задачу, какой бы сложной она ни казалась. Кто знает, может быть, тебя именно в этот момент проверяют на усердие в работе!
    • Избегай заданий на компьютере. Нет способа быстрее раскусить непрофессионала, чем сразу же бросить его в пекло программирования. Твоя задача — постараться перевести все беседы на высокий уровень, где обсуждаются общие подходы и концепции, но никак не конкретная реализация в решении той или иной задачи. Если тебе дали бумагу и ручку и попросили записать решение, то попроси возможность нарисовать его схематически. Таким образом, удалившись от синтаксиса конкретного языка, ты не только убережёшь себя от каких-нибудь режущих глаз ошибок, но и покажешь, что способен мыслить абстрактно, не вдаваясь так уж сильно в детали.
    • Начинай говорить первым. Избегай ситуаций, когда в воздухе виснет пауза, во время которой в мозгу у интервьюера может созреть очередной коварный вопрос. Как только происходит какая-либо заминка, начинай рассказывать что-нибудь из того, что ты хорошо знаешь. Постарайся навязать интервьюеру свою игру.
    • Старайся говорить правду. Если ты никогда не писал PL/SQL процедуры, то лучше об этом сказать прямо. Возможно, в этом для тебя будет минус, однако ты убережёшь себя от нужды выкручиваться, отвечая на вопрос, в котором ничего не смыслишь. Опытный интервьюер за версту почувствует твои пробелы в знаниях.
    • Бойся маленьких компаний. В небольших компаниях, как правило, небольшие команды. Чем меньше в команде людей, тем быстрее тебя раскусят. Твоя цель — большая и неповоротливая корпорация, где ты сможешь выиграть для себя немного времени.
    • Соблюдай дресс-код. Если ты придёшь на собеседование на должность программиста в шикарном костюме, то это вызовет больше подозрения, чем если ты явишься в шортах или потёртом свитере. Не лишним будет также нацепить очки, мол, «эдакий я книжный червь».
    • Конечно, кто-то знающий может отметить, что приведённый выше рецепт — это скорее способ стать кодером, чем программистом, и он где-то будет прав. Однако дело всё в том, что вы никогда не найдёте вакансию с заголовком «Требуется плохой кодер». Всем нужны программисты. Желательно senior. У которых более пяти лет опыта работы на корпоративных проектах и которые одинаково хорошо владеют сразу несколькими языками программирования, при этом досконально разбираются в СУБД, умеют писать bash-скрипты, хранимые процедуры, знают в совершенстве Linux, TCP/IP, обладают лидерскими качествами, стрессоустойчивостью, коммуникабельностью и ещё массой навыков, «без которых никак».

      Такие люди существуют, я их сам видел. Но их слишком мало, чтобы полностью покрыть нужды вечно голодного рынка IT-специалистов. А это значит, что у тебя всегда есть шанс, эдакий ты авантюрист.

    LifeHacker

    Лайфхакер — блог о продуктивности, мировоззрении, здоровье и спорте, и конечно о том, как использовать компьютеры, сайты и технологии с наибольшей эффективностью и пользой. Мы рассказываем об интересных программах и методиках, о которых вы могли и не знать.

    Как правильно обрабатывать ошибки в bash скриптах?

    Есть скрипт к примеру монтирования жесткого диска при запуске системы.

    А нет универсальной проверки на любую ошибку? Типо такого?

    скрипт завершается при ошибке в выполненной команде только если bash был запущен с ключом -e.
    Можно отменить эффект этого ключа выполнив команду set -e
    Или добавить к команде, которая может завершиться с ошибкой || : например так:
    do-something || :
    Или завернуть вызов такой команды в условие, например так:

    Более подробно можно прочитать в man 1 bash, в разделе о встроенной команде set.

    > Пытаюсь на Android отлаживать нативные (NDK) приложения при помощи gdb.
    Rou1997: ваш вопрос про gdb. Вы задали его мне одному, как комментарий к ответу на совсем другой вопрос. Вы можете задать его нормально, и, я уверен, вам кто-нибудь ответит, может быть и я.

    > А вы что хотите и зачем?
    Я хочу порядка в примыкающей ко мне части вселенной. Мне так легче жить.

    Учимся программировать в Shell: обработка ошибок

    Разница между хорошо написанной программой и плохо — это возможность «справляться» с непредвиденными ситуациями. Как мы уже знаем любая хорошо написанная программа возвращает exit-статус операционной системе после окончания работы. Для написания правильных программ нужно всегда делать проверку exit-статуса, особенно в тех случаях, когда что-то может пойти кардинально и невозвратимо не в ту сторону. Вот пример очень плохой программы

    На первый взгляд все вроде хорошо. Заходим в какую-то директорию и удаляем из нее все файлы. НО, что если по каким-то причинам этот каталог не будет существовать? Тогда наш скрипт удалит все файлы из текущей рабочей директории. А это плохо!

    Проверка exit-статуса

    Существует несколько способов проверить exit-статус. Одним из них является проверка переменной окружения $?, которая возвращает exit-статус последней выполненной команды. Например

    Да-да, в Linux есть такие команды как true и false. Эти команды ничего не делают, просто возвращают соответственный exit-статус и мы уже знаем какой. Обладая новыми знаниями давайте перепишем наш скрипт

    Здесь можно увидеть еще одну незнакомую конструкцию 1>&2 — она означает переадресацию данных на стандартную ошибку (standard error). Теперь скрипт проверяет exit-статус команды cd и ничего страшного не произойдет, если он вдруг будет не нулевым.

    Это конечно же, рабочий вариант, но его можно переписать более изящно

    Но а для гурманов и любителей вкусняшек

    And и OR строки

    Предыдущий пример в мэнуале по Bash имеет даже свое название — AND строка. Выполнение команд, можно объеденять в AND и/или OR строки. Например

    command2 выполнится только при условии, если command1 вернет нулевой exit-статус или

    command2 выполнится только при условии, если command1 вернет не нулевой exit-статус. Посмотрим на простом примере

    Exit-статус и фишки вроде выполнения строки команд — это конечно хорошо, но что если в нашем пример выше переменная some_directory будет пустой? Тогда Bash подумает, что cd запускается без параметров и поменяет текущую директорию на рабочий каталог пользователя, который запустил скрипт и удалит там все файлы. А это совсем как плохо! По-этому проверяйте не только выполнение команд, но и переменные, которые вы им передаете.

    Error exit функция

    При написании скриптов хорошим тоном является создание функции отвечающей за обработку ошибку (error handler). Перепишем наш скрипт с учетом этого

    Теперь все ошибки выводим при помощи error_exit функции, в данном случае она просто выводит текст ошибки. Будет полезно немного улучшить эту функцию добавив имя файла в котором произошла ошибка (это понадобится, когда ваш скрипт будет состоять более чем из одного файла), а также номер строки в которой она произошла (номер строки хранится в переменной окружения LINENO). Напишем простой пример использования

    Как видно из кода, если не передать текст ошибки в функцию, то будет использоваться значение по умолчанию — Unknow error.

    Никогда не забывайте обрабатывать ошибки в своих программах!

    КОНСОЛЬНЫЕ ХИТРОСТИ В BASH

    Запись и воспроизведение в консоли.
    Все привыкли пользоватся скриншотами и записью видео
    с экрана. Я даже встречала мануалы как делать скрины в голой консоли.
    Хочу поделится с вами интересным способом как делать «настоящую»
    видеозапись с консоли без лишних движений. Выполните для примера следующие команды
    в терминале:

    Пояснение к этому смотрите в коментариях.

    Есть еще тулза на питоне можно смотреть видео в браузере

    Комментарии

      nezabudka, очень интересная вещь, положил в закладки.
      Единственное, что расстраивает — получившийся ролик не так просто читать вручную — там много мусора, а если включить что-нибудь, занимающее всё видимое пространство (например vim), и полистать, мусора становится ну очень много. Я конечно понимаю, что это всё сделано для возможности последующего проигрывания, но хотелось бы иметь возможность записывать только введённые команды.

      В общем, спасибо за информацию, полезная штука

      Запись от tezaurismosis размещена 30.03.2020 в 18:24

      $». Так вот в обеих случаеях в фильтре должны быть только логин@машина и
      в зависимости от требуемого вывода наличие квадратных скобок.
      Можно упростить, у меня работает даже так ‘/nez/’ и ‘/[nez]/’ и так ‘/rox/’ и ‘/[rox]/’ и даже
      выводит участки кода выполненные из под root
      Можно включать запись, устанавливать приложение, настраивать и таким вот образом по окончании перенаправлять
      все в фойл, фактически выкинув все лишние интервалы времени и можно делится с форумчанами. Спасибо за
      хорошую подачу, теперь это действительно стало удобно.
      Обнаружила такой фильтр методом тыка, сама объяснить как он работает не могу, буду рада
      любым замечаниям по этому поводу.

      Мастер Йода рекомендует:  5 книг по проектированию Web API
      Добавить комментарий