Bashуй пока молодой
6 subscribers
8 photos
3 videos
15 links
Все что связано с bash кодингом, интересные штуки, игры, примеры, курьёзы, непонятки, туторылы. От создателя piu-piu и sshto)
Download Telegram
Отгадайте песню по строке: "Владислав! Детка, не обижай меня!"
В качестве приятной альтернативой для if/then/else можно использовать вот такую конструкцию:
[[ test_expression ]] && code_if_ok || code_if_fail

Для каких-то простых проверок подходит идеально:
$ true && echo ok || echo fail
ok

$ false && echo ok || echo fail
fail

Но есть подвох) если code_if_ok часть по какой-то причине завершается с ошибкой code_if_fail тоже внезапно выполнится, пример:
$ true && { echo ok; false;} || echo fail
ok
fail

Но это можно обойти вот так:
$ true && { echo ok; false; true;} || echo fail
ok

Команда true в конце code_if_ok части выдаст код завершения 0 и предотвратит выполнение code_if_fail.
Nice alternative to if/then/else is this construction:
[[ test_expression ]] && code_if_ok || code_if_fail

It's perfectly suits for some simple cases. Here is an example:
$ true && echo ok || echo fail
ok

$ false && echo ok || echo fail
fail

But there is a catch if code_if_ok failed for some reason code_if_fail will also be executed but in most cases that's not what we expect, check this out:
$ true && { echo ok; false;} || echo fail
ok
fail

Of course this could be workarounded like this:
$ true && { echo ok; false; true;} || echo fail
ok

We put true command at the and of our code_if_ok part to make it end with 0 exit code and prevent code_if_fail part to start.
This media is not supported in your browser
VIEW IN TELEGRAM
Обновил немного spinner теперь выглядит так
Грибной суп, борщ, щи и т.д. принято подавать со сметаной.
Большинство "разбулькивают" сметану в тарелке. Я тоже разбулькивал...
Не надо так. Положите сметану в тарелку "горкой".
Затем ложкой подцепите кусочек сметаны, зачерпните супчика и АМ.
МММ... Попробовав однажды я понял что зря прожил жизнь(
Не разбулькивайте!)
Долго думал как назвать свою поделку для kubectl. В итоге ничего лучше kube-dialog не придумал, так и назвал. Kube-dialog это аналог sshto только для k8s. Обертка kubectl команд с помощью dialog'а. И вот сегодня, сейчас меня вштырило, придумал короткое и ёмкое название - KUI (Kubectl User Interface)! Черт, почему я сразу об этом не подумал?)
Но лучше поздно чем никогда! Встречайте KUI )

Творите, выдумывайте, пробуйте!)
Все знают что такое cron?
В двух словах, если надо запускать какую-нибудь программу/скрипт регулярно по расписанию, вот для этого нужен cron.
Но есть один нюанс. Минимальная единица времени в cron'е - минута. А если надо выполнять скрипт каждые 10 секунд?
Можно сделать что-то такое:
* * * * * /path/to/some/script.sh
* * * * * sleep 10; /path/to/some/script.sh
* * * * * sleep 20; /path/to/some/script.sh
* * * * * sleep 30; /path/to/some/script.sh
* * * * * sleep 40; /path/to/some/script.sh
* * * * * sleep 50; /path/to/some/script.sh

Или использовать таймеры systemd. Вот простой пример, сервис:
$ sudo cat /etc/systemd/system/test.service 
[Unit]
Description=Timer test
After=multi-user.target

[Service]
Type=simple
ExecStart=/path/to/some/script.sh
WantedBy=multi-user.target

И таймер для него:
$ sudo cat /etc/systemd/system/test.timer 
[Unit]
Description=Timer test

[Timer]
OnBootSec=1min
AccuracySec=1us
OnUnitActiveSec=10

[Install]
WantedBy=multi-user.target

Активируем:
sudo systemctl daemon-reload
sudo systemctl start test.timer
sudo systemctl status test.timer

● tets.timer - Timer test
Loaded: loaded (/etc/systemd/system/test.timer; disabled; vendor preset: enabled)
Active: active (waiting) since Thu 2024-06-27 15:56:26 MSK; 1s ago
Trigger: Thu 2024-06-27 15:56:36 MSK; 8s left
Triggers: ● test.service

июн 27 15:56:26 workhorse systemd[1]: Started Timer test.

$ systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Thu 2024-06-27 15:56:36 MSK 5s left Thu 2024-06-27 15:56:26 MSK 4s ago test.timer test.service
...

По умолчанию таймер запускает одноименный сервис, test.timer запустит test.service.
Но можно указать любой добавив директиву Unit=some.service в [Timer].

Творите, выдумывайте, пробуйте!