Пули закончатся раньше чем ноги
Откапал сегодня в одном коммерческом интерпрайзе такую конструкцию:
Смотрю я в неё и понять не могу, а нахуя?
ㅤ
Давай разберемся что тут не так.
Понял в чем дело? Нет? Давай дальше…
Вопрос — нахуя здесь «test»? Цикл и так является условным и сам проверяет что вернула команда. Получается избыточность.
Такое обычно херачат, либо по привычке, либо когда нужно быстрое решение, а времени на ресерч нет. Работает да и хрен с ним.
Вся эта конструкция могла бы выглядеть так:
Цикл будет шуршать, пока команда pgrep отрабатывает без ошибок и находит процесс.
Вот такая вот романтика, на хую два бантика… Изучай!
tags: #bash
—
🔔 ➡️
Откапал сегодня в одном коммерческом интерпрайзе такую конструкцию:
while [ $(pgrep process_name)>'0' ]
do
sleep 5
done
Смотрю я в неё и понять не могу, а нахуя?
ㅤ
Давай разберемся что тут не так.
«[»
= это аналог или синоним встроенной команды «test». Если не задавать оператор, то на пустой строке вернется FALSE. Ну и логично что вернется TRUE если срока не пустая.«while»
— ежу понятно, условный цикл. Будем вертеть на хуй, пока команда заданная в условие возвращаешь истину. В нашем случае эта команда «test».«pgrep»
— ищем процесс с именем process_name. Эта штука выводит на стандартный вывод PID процесса. Если процесс не найден, код возврата отличный от нуля и нуль в противном случае.«$(command)»
— Command запускается в подоболочке. Результат выполнения, подставляется в текущую позицию.«>»
— Перенаправляет результат работы команды в файл (в нашем случае файл 0). Существующий файл, перезаписывается. Несуществующий, будет создан.Понял в чем дело? Нет? Давай дальше…
Вопрос — нахуя здесь «test»? Цикл и так является условным и сам проверяет что вернула команда. Получается избыточность.
Команда test — Предназначена для проверки типа файла и сравнения чисел и строк. Возвращает код возврата 0 (истина) или 1 (ложь) в зависимости от вычисления выражения. Выражения могут быть как унарными, так и бинарными.
Такое обычно херачат, либо по привычке, либо когда нужно быстрое решение, а времени на ресерч нет. Работает да и хрен с ним.
Вся эта конструкция могла бы выглядеть так:
while pgrep process_name &> /dev/null
do
sleep 5
done
Цикл будет шуршать, пока команда pgrep отрабатывает без ошибок и находит процесс.
Вот такая вот романтика, на хую два бантика… Изучай!
tags: #bash
—
🔔 ➡️
Набрёл сегодня на мануал по установке ack, а там такое:
В строке, в конце есть непонятности:
ㅤ
Опять какая-то магия, а магию мы с тобой любим.
Давай разберемся.
В данном случае
Например,
Вместо доступа к уже выполненной команде из истории, мы ссылаемся на текст текущей строки.
Соответственно:
Как это работает?
Сначала выполняется команда curl, которая скачает файл ack-2.28-single-file и сохранит его в
После этого, команда chmod изменяет права доступа для файла.
А
И по итогу команда превращается в
Вот и вся магия. Упорото? Аще!
А зачем это нужно?
- удобно для автоматизации и избежания дублирования ввода
- снижает вероятность ошибок, если накосячил в путях
Короче эта хреновина делает команду более динамичной и минимизирует рукоблудие.
Штука прикольная, как говорится — век живи, век учись.
🔥 Ну и с пятницей друзья! Еще пару недель и каникулы.
tags: #bash
—
🔔 ➡️
curl https://beyondgrep.com/ack-2.28-single-file > ~/bin/ack && chmod 0755 !#:3
ack — инструмент для поиска текста в файлах, который часто используется разработчиками как более удобная и современная альтернатива `grep`. Он написан на Perl и ориентирован на работу с кодом.
В строке, в конце есть непонятности:
!#:3
ㅤ
Опять какая-то магия, а магию мы с тобой любим.
Давай разберемся.
В данном случае
!#:3
— это конструкция, связанная с историей команд в оболочке Bash/Zsh.!
= Используется для доступа к истории команд.Например,
!!
повторит последнюю команду, а !123
выполнит команду с номером 123 в истории.#
= Ссылается на текущую команду, которая в данный момент пишется.Вместо доступа к уже выполненной команде из истории, мы ссылаемся на текст текущей строки.
:3
= Указывает, что нужно взять третий аргумент в текущей строке.Соответственно:
:1 — первый аргумент
:2 — второй аргумент
:3 — третий аргумент
Как это работает?
Сначала выполняется команда curl, которая скачает файл ack-2.28-single-file и сохранит его в
~/bin/ack.
После этого, команда chmod изменяет права доступа для файла.
А
!#:3
подставляет третий аргумент текущей команды, то есть ~/bin/ack.
И по итогу команда превращается в
chmod 0755 ~/bin/ack
curl http://beyondgrep.com/ack-2.28-single-file > ~/bin/ack && chmod 0755 ~/bin/ack
Вот и вся магия. Упорото? Аще!
А зачем это нужно?
- удобно для автоматизации и избежания дублирования ввода
- снижает вероятность ошибок, если накосячил в путях
Короче эта хреновина делает команду более динамичной и минимизирует рукоблудие.
Штука прикольная, как говорится — век живи, век учись.
🔥 Ну и с пятницей друзья! Еще пару недель и каникулы.
tags: #bash
—
🔔 ➡️
This media is not supported in your browser
VIEW IN TELEGRAM
🎄 Моя! 🎄
Ну чо, кто на ёлку богат уже? Кидайте в комменты ёлки и своё пятничное настроение, пиво там, вискарь или чо там у вас.
Ну чо, кто на ёлку богат уже? Кидайте в комменты ёлки и своё пятничное настроение, пиво там, вискарь или чо там у вас.
Так вот
🔤🔤🔥🔤🔤🔤🔤
Нука бармалеи, чо будет?
+ прикол
🔤🔤🔥🔤🔤🔤🔤
Эта музыка будет вечной, если я заменю батарейки
#!/bin/bash
declare -i a=9223372036854775803
for i in {1..10};do
echo $((a++))
done
Нука бармалеи, чо будет?
+ прикол
#!/bin/bash
declare -i a=1
for i in {1..64};do
a=a*2
[[ $i -gt 60 ]] && echo $i,$a
done