Доброго!
Допустим в скрипте работает цикл с проверкой, к примеру, строки из ps -ef и некоторой задержкой по sleep. В цикле используются grep, awk и др. Поясните, bash один раз грузит с диска проги используемые внутри цикла или при каждом повторе цикла? Если второе, то можно ли предварительно загрузить их в память, дабы не дёргать каждый раз винт и тем самым увеличить быстродействие? RAM диск не рассматриваем.
Спасибо.
> Доброго!
> Допустим в скрипте работает цикл с проверкой, к примеру, строки из ps
> -ef и некоторой задержкой по sleep. В цикле используются grep, awk
> и др. Поясните, bash один раз грузит с диска проги используемые
> внутри цикла или при каждом повторе цикла? Если второе, то можно
> ли предварительно загрузить их в память, дабы не дёргать каждый раз
> винт и тем самым увеличить быстродействие? RAM диск не рассматриваем.
> Спасибо.Это зависит от планировщика системы.
При сильном желании, bash скрипт можно скомпиллировать в исполнительный бинарник.
> Доброго!
> Допустим в скрипте работает цикл с проверкой, к примеру, строки из ps
> -ef и некоторой задержкой по sleep. В цикле используются grep, awk
> и др. Поясните, bash один раз грузит с диска проги используемые
> внутри цикла или при каждом повторе цикла?Да с диска. И нет, не совсем с диска.
Если все блоки, нужные для запуска бинарей при очередном запуске _ещё_ лежат в кеше ОС, то запуск будет практически как из RAM-диска.
Если "кеши вымылись" /сбросились, будет чтение бинарей с дискового устройства...Создание процессов, пйапов, динамическая линковка с библиотеками, чтение/перечитывание прогами их конфигов (буде надобность в таковых обнаружится), что-то ещё может быть... происходит при каждом запуске.
...и результаты всего этого выбрасываются каждый раз, как конвейер с-под шела отработает.
>RAM диск не рассматриваем.
Прыгать в обручи? Как высоко изволите?
Вообще подход конечно интересный .... ворочить скриптом тулзы, и при этом парится за быстродействие, хм, однако.
Если уж хочетсо парсить текст без костылей - есть перл, если судить по циклическому парсингу - можно натравить нужный stdout на конвейер ... тут требуется прояснить исходные условия задачи для выработки вектора пинка в нужную сторону.
Интерес чисто теоретический и возник во время написания скрипта для Orange PI H6 с OS от производителя, где драйверов практически нет, а потребовалось синхронизировать время со спутников. Использовать Gpsd ради редких перезагрузок посчитал не рациональным, пошёл таким путём GNSS > ds3231 > hwclock > systemtime. Цикл проверяет только поступление данных с GNSS, задержка 0.01 сек, далее парсер и разово отправка в ds3231. Супер точного времени мне не надо. Работой скрипта доволен и быстродействие вполне устраивает. Изучать и писать на перле, си, ради разовой потребности не вижу смысла, мне и баша достаточно от засыхания мозгов на пенсии.
Повторю, вопрос был чисто из любопытства. Спасибо ответившим.
> писать на перле, си, ради разовой потребности не вижу смысла, мне
> и баша достаточно от засыхания мозгов на пенсии.
> Повторю, вопрос был чисто из любопытства. Спасибо ответившим.Если нужна скорость, то совет глянуть в сторону средств Баша работы с переменными, вместо Sed, Awk и прочих утилит, на вызов которых надо вызывать +1 подкапотный экземпляр шелла и подобное. Скорость заметно отличается на глаз. Кроме того, обратить внимание, сколько экземпляров, чего именно и в каких случаях вызывается +n дополнительных раз.
В числе прочего, типа вот это использовать, например:
https://wiki.bash-hackers.org/syntax/pe
https://www.shellscript.sh/tips/pattern-substitution/
https://www.cyberciti.biz/tips/bash-shell-parameter-substitu...
> Если нужна скорость, ....
> https://www.cyberciti.biz/tips/bash-shell-parameter-substitu...Спасибо, очень интересно, попробую разобраться и применить в будущих скриптах.