shell
Отправка в twitter последней введённой строчки в терминале
Бывает так, что, используя twitter, (если Вы вдруг не знаете, что это такое, то можете проходить мимо; если не знаете, но стало интересно, кликайте сюда) хочется на ответ "what are you doing now" скопипастить ту команду, которая была выполнена в оболочке. Чтобы сделать это стандартными средствами, через браузер, нужно слишком много телодвижений, поэтому это не наш Путь. В связи с этим хочется предложить пользователям twitter'а (ну и заодно операционных систем семейства GNU/Linux) скрипт, выполнение которого отправляет последнюю введённую в терминале команду в Ваш twitter-аккаунт:
> $любимый_текстовый_редактор twitshСкопируем строчки:
обработка аргументов с помощью getopts в конце строки
Бывает так, что нужно создать скрипт, при вызове которого дополнительные аргументы командной строки должны идти в конце. Например, чтобы
$ ./script action -o a -p -t argumentвыполнял действие action, при этом обрабатывая аргументы -o -p -t, но при
$ ./script -o a -p -t action argumentвыводил справку по использованию. (По такому принципу работает ряд утилит; в частности - многие распределённые системы контроля версий - git, mercurial, bazaar и т.п.)
Традиционно, для обработки аргументов используется утилита getopts; в Сети также можно без проблем найти множество примеров её использования.
Приблизительный пример же того, что нужно нам:
#!/bin/bash #... USAGE="script <action> <options> [file | directory]"; case "$1" in #обрабатываем действие, которое предусмотренно скриптом action1 | action2 ) action="$1" ;; #в противном случае выводим справку по использованию
настройка приглашений zsh
Бывает так, что, работая бОльшую часть времени только с одной учётной записи и с одного хоста, осознаешь бессмысленность раздутого на пол-экрана терминала приглашения командной строки наподобие
myuseraccount@mycomputer:/path/to/some/folder $
Зная, что в zsh можно задействовать второе приглашение, справа и, умея пользоваться гуглом, проковырявшись с настройкой конфига, хотелось бы поделиться куском скрипта, который, скопировав в .zshrc, будет делать следующее:
WCD - Wherever Change Directory
Wcd - тулза для быстрой смены директорий. Позволяет экономить время на наборе. Можно набрать только часть имя директории и программа сама прыгнет в нее. Также поддерживаются регулярные выражения.
Интерактивная apt-оболочка
Бывает так, что длительная работа с apt из терминала немного надоедает и начинает утомлять ввод длинных последовательностей семейства команд apt-*. Однако существует утилита aptsh, которая запускает в терминале интерактивную оболочку для работы с apt. Данная утилита входит в репозитарии многих debian-based дистрибутивов.
Чтобы после установки запустить оболочку, выполните:
$ sudo aptsh
После запуска будет выведено приглашение:
>
Далее можно работать с командами apt, но без необходимости вводить перед ними apt-*. Например, для получения информации о пакете, достаточно выполнить:
> search aptsh
Или, например, чтобы получить исходный код пакета, выполните:
> source aptsh
Выйти из сеанса в shell-оболочку можно командой exit или quit:
> exit
За дополнительной информацией просьба обращаться к соответствующей man-странице.
читалка заголовков писем на googlemail
Читалка заголовков мэйлов с googlemail:
#!/bin/sh URL='https://mail.google.com/mail/feed/atom' curl --silent -u name@googlemail.com:passwd $URL | \ grep -v Gmail | \ while read line do echo $line | grep "<title>" 1>/dev/null \ && TITLE=`echo $line | sed -e 's/<title>//' -e 's/<\/title>//'`;\ echo $line | grep "<name>" 1>/dev/null \ && NAME=`echo $line | sed -e 's/<name>//' -e 's/<\/name>//'`;\ echo $line | grep "<email>" 1>/dev/null \ && EMAIL=`echo $line | sed -e 's/<email>//' -e 's/<\/email>//'` && \ echo $(echo $NAME "<"$EMAIL">" $TITLE) done
P.S. Лучшего применения чем прикрутить эту штуку на dzen не нашел :-)
Где найти ifconfig простому пользователю
Начинающие часто сталкиваются с проблемой того что ifconfig не запускается при работе под обычным пользователем:
$ ifconfig
zsh: command not found: ifconfig
$И сразу возникает вопрос: "где дать прав/прописать/внести в группу что бы ifconfig запускался".
Ответ:
Скрипт перевода русских слов набраных в английской расскладке
Многие печатают смотря на клавиатуру и поэтому не сразу замечают что печатают по русски не переключив раскладку. Или у меня когда сижу на с плохим интернетом, то при печати в аське которая на сервере прежде чем видишь что печатаешь, проходит секунд 10 и успеваешь пару предложений набрать Ж:-)
Простенький скрипт перевода русских слов набранных в английской раскладке. Построчно переводит стандартный ввод и выводит результат на стандартный вывод. Можно как параметр скрипта указывать имя файла (мне ни разу не понадобилось правда Ж:-).
Учтите что сам скрипт сохранён в KOI8-R кодировке, а после чего iconv -f koi8-r переводит вывод в вашу текущую локаль (у меня например ru_RU.UTF-8).
Что бы не мучатся с перекодировкой можно просто скачать (не забываем переименовать и дать права на исполнение Ж:-).
#!/bin/sh
# for translation wrong typed text like: hfvjr -> рамок
cat $* |
tr "qwertyuiop[]nm,./QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?" \
"йцукенгшщзхъфывапролджэячсмитьбю/ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ?" |
iconv -f koi8-rПример использования:
$ 2cyr ye xnj e dfc nfv dc. yjxm uekzkb& ну что у вас там всю ночь гуляли& ^D $
Как узнать размеры терминала в скрипте
Иногда полезно узнать размеры терминала в котором работает ваш скрипт (например при использовании dialog).
0. По умолчанию терминалы под X-Window устанавливают размеры терминалов в переменные LINES и COLUMNS.
Но к сожалению в скрипты они не экспортятся Ж:-(
1. Можно воспользоватся программой stty, если она поддерживает параметр size
$ stty size 71 159 $ eval `stty size | sed -e 's/\(.*\) \(.*\)/LINES=\1 COLUMNS=\2/'` $ echo $LINES $COLUMNS 71 159 $
2. Если на машине установлен ncurses (а сейчас сложно тайти машину на которой он не стоит Ж:-)
то можно воспользоваться программой tput.
COLUMNS=`tput cols` LINES=`tput lines`
3. Если на машине установлен X-Window, то можно воспользоваться командой resize которая возвращает
код на sh для установки переменных LINES и COLUMNS.
$ resize COLUMNS=159; LINES=71; export COLUMNS LINES; $ eval `resize` $ echo $LINES $COLUMNS 71 159 $


