пятница, 29 августа 2008 г.

Упрощаем себе жизнь: интеграция bash-скриптов в систему

Хехе, любопытный заголовочек, не правда ли? Заинтересовало? На самом деле, ничего феноменального или гениального в этой статье описано не будет — просто одна маленькая заметка для новичков в мире linux.

Итак, все мы знаем, что bash-скрипты — это круто, ибо их легко писать и они здорово облегчают нам жизнь.

Возьмём для примера меня :) Я недавно мигрировал с винды, и потому столкнулся с рядом проблем при переносе данных. Основная проблема — кодировки. В Debian я преспокойно поставил себе в качестве кодировки локали UTF-8, но в винде-то CP1251! Поэтому всякие там txt'шные заметки и текстики (а я вообще поклонник принципа «каждой технологии — своё применение», и потому у меня каждый документ по возможности сохранён в формате, наиболее для этого документа подходящем), коих у меня просто море, читаться отказались. То есть не совсем отказались — KWrite способен прочесть их, но для этого надо сделать два лишних клика. А вот Midnight Commander не заставить понимать CP1251 и тремя кликами (хотя, может, и можно, но тюнинговать его мне откровенно влом, так что я решил повыпендриваться :) ). Да и вообще, UTF-8 рулит, CP1251 - отст… эм… просто альтернативная кодировка :)

Естественно, первое время я перегонял CP1251 в UTF8 вручную. Делал я это enconv'ом (входит в пакет enca). Но однажды я открыл сконвертированный txt'шник во встроенном редакторе MC и увидел в конце каждой строки какой-то гадкий чёрный прямоугольник с «крышей» (имеется в виду символ «^»). Призадумавшись, я вспомнил, что в винде для обозначения новой строки применяется CRLF, а в никсах — LF. Проблема была решена практически моментально (респект гуглу) — tr -d '\r' <inputfile >outputfile превратит CRLF в LF (материал из английской википедии). Я объединил enconv с tr и получил вполне приличную конструкцию, которая исправно выполняло поставленную задачу. Но каждый раз вбивать сиё творение мне быстро надоело, и я написал скриптик win2lin:
#!/bin/sh
enconv "$1" && tr -d '\r' <"$1" >temp && mv temp "$1"
Теперь конвертировать стало проще — пишем ./win2lin имя_конвертируемого_файла и получаем результат. Но постоянно тягать скрипт в ту директорию, где он нужен, быстро надоело; поэтому я поместил его в корневой каталог и конвертировал файлы командой ~/win2lin file.

А потом я случайно вспомнил про переменные окружения, среди которых оказалась и PATH — переменная, содержащая пути к исполнимым файлам. Недолго думая, я полез в ~/.bashrc, но не нашёл там ничего полезного. Тут мои глаза наткнулись на файлик ~/.bash_profile — и именно там оказался ключик к окончательному решению.

В общем, я создал каталог ~/scripts, дописал в ~/.bash_profile вот это:
if [-d ~/scripts] ; then
  PATH=~/scripts:"${PATH}"
fi
, поместил в ~/scripts свой win2lin и возрадовался жизни :)

Примечание: изменение к .bash_profile подействует только после перезагрузки баша. Если влом (нельзя?) ребутиться, то можно сделать так:
source ~/.bash_profile
Спасибо Maxim G. Ivanov'у за совет.

Ну вот и всё, именно это я и подразумевал под "интеграцией скриптов в систему". :)
Пишите свои сценарии, упрощающие рутинные операции, и кладите их в ~/scripts, откуда они будут доступны по первому зову!

Копируете статью — поставьте ссылку!

2 комментария:

Maxim G. Ivanov комментирует...

Очень хорошо написано для новичков! Думаю, много кому понравится. Только не проще ли настройки баша обновлять посредством $ source ~/.bashrc ?

Minoru комментирует...

Рад, что хоть кому-то это понадобилось :)

Заменил своё шаманство с $PATH на source — так правильнее :)

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.

 
Blogger logo Debian logo Creative Commons License FeedBurner Subscribers Counter