Архив метки: bash

Bash-fu. Выполнить для каждого файла в одну линию

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

for FILE in SOMEWHERE; do SOMETHING; done

Вот так, например, можно все wav-файлы в текущей директории конвертировать в CAF с кодеком IMA4 (полезно для iOS приложений). Работает под Маком с установлеными тулзами для разработки (нужна afconvert оттуда):

for FILE in *.wav; do afconvert $FILE `basename "$FILE" .wav`.caf -d ima4 -f caff -v; done

Bash-fu. Объём виртуальной памяти, выделенной процессом

Потребовалось в баш-скрипте получить объём виртуальной памяти, выделенной процессом. Получилось так (через ps aux):

MEMORY_USED=`ps aux | awk -v pid="$PID" '{ if ($2 == pid) print $5 }'`

Где PID — идентификатор процесса.

Свой /etc/hosts для каждой wi-fi сети (через NetworkManager)

Условия задачи: имеется ноутбук, тягаемый туда-сюда, как и полагается ноутбуку. Есть пара основных мест, где он бывает: дом и работа. И там и сям он подключается к локальной сети через wi-fi. И там и сям имеются некие сервера, которые из оружающего мира видны через внешний IP, а из локальной сети только через локальный IP (порты форвардятся на роутере) по некой причине, которую я сам не до конца догоняю, но поделать с этим ничего нельзя. Если вы находясь в той же сети, что и сервер, попробуете зайти на него, используя его доменное имя, а не прямой локальный IP, то вас ждёт облом, ибо DNS выдаст вам внешний IP. Решение есть такое: прописать всем компам в локальной сети в файле hosts локальный айпишник для заданных доменных имён. Для стационарных компов это сделано и забыто, но как быть с упомянутым выше ноутом?

Решение: под Виндой я написал скрипт, которым вручную переключал hosts на нужную сеть (скрипт просто копировал заранее подготовленный файл). Но вот недавно я после полугодового перерыва, вновь окунулся в чудесный мир Линукс (об этом отдельно) и подумал, что переключать руками как-то западло. Читать далее