Упрощаем себе жизнь: интеграция 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
, откуда они будут доступны по первому зову!
Comments (migrated from Blogger)
On 2009-04-14T22:07:00.000+03:00, Programmaster wrote:
Рад, что хоть кому-то это понадобилось :)
Заменил своё шаманство с $PATH на source — так правильнее :)
Your thoughts are welcome by email
(here’s why my blog doesn’t have a comments form)
On 2009-04-14T14:21:00.000+03:00, Maxim G. Ivanov wrote:
Очень хорошо написано для новичков! Думаю, много кому понравится. Только не проще ли настройки баша обновлять посредством $ source ~/.bashrc ?