shell


bliznezz аватар

выход из bash без сохранения истории

перевод типса из shell-fu.

самый простой вариант это SIGKILL своего шелла:

 kill -9 $$

вариант по-нежнее:

 unset SAVEFILE; unset HISTFILE;
0
Ваша оценка: Ничего
ia аватар

выполнение команды в zsh в зависимости от синтаксиса введённой строки

Бывает так, что надоедает дописывать к началу скопированной в терминал, к примеру, из браузера, ссылки, саму команду, которая должна эту ссылку обработать. Например, вот так (где | - текущее положение курсора):

Если Вам это знакомо, то Вы понимаете, о чём я. Причём речь не обязательно о git:// для git clone; это может быть lp: или bzr:// для bzr branch, http:// - для wget или aria2c, file:/// - для cd ну и т.д. и т.п. - вариантов множество и примеры использования могут зависеть от того, с какими видами пар ссылка/действие приходится работать. Конечно, можно настроить короткие алиасы для команд, но можно и пойти чуть дальше - можно настроить, что же должен выполнить zsh в зависимости от синтаксиса введённой строки. Для этого нужно отредактировать .zshrc файл, добавив туда функцию precmd (чуть подробнее про precmd можно прочитать в комментариях к коду в этом совете - http://linsovet.com/content/настройка-приглашений-zsh) примерно следующего содержания:

0
Ваша оценка: Ничего
ia аватар

Отключение вывода логов на tty-терминал

Бывает так, что для комфортной работы на одном из виртуальных терминалов (tty[1-6]) мешают сообщения ядра о том или ином событии (например, о подключении usb flash или о статусе работы того или иного устройства). Для отключения сообщений можно воспользоваться утилитой для настройки аттрибутов терминала; выполните в текущем виртуальном терминале команду:

$ sudo setterm -msg off

Теперь сообщения на текущем виртуальном терминале появляться не будут.
За дополнительной информацией просьба обращаться к соответствующей man-странице по setterm.

0
Ваша оценка: Ничего
ramok аватар

Очистка временых файлов в shell-скриптах

Допустим у вас есть shell-скрипт который создаёт временные файлы, именованые пайпы и прочие вещи которые необходимо очищать перед окончанием скрита.
Но если пользователь прервал работу вашего скрипта (например по ctrl-c), то в системе останется мусор.

Проблема решается регистрацией обработчика сигнала EXIT. Например

#!/bin/sh
 
TMPFILE=`mktemp`
trap "rm -f $TMPFILE; echo процедура очистки 1>&2" EXIT 
 
# ....

Когда скрипт закончится (не зависимо от того закончится он нормально или пользователь его прервёт), обработчик удалит временный файл и выведет отладочное сообщение.

Грубо говоря это аналог C-шной фунции atexit() или C++-шного деструктора класса (только для всего скрипта).

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)
ia аватар

Отправка в twitter последней введённой строчки в терминале

Бывает так, что, используя twitter, (если Вы вдруг не знаете, что это такое, то можете проходить мимо; если не знаете, но стало интересно, кликайте сюда) хочется на ответ "what are you doing now" скопипастить ту команду, которая была выполнена в оболочке. Чтобы сделать это стандартными средствами, через браузер, нужно слишком много телодвижений, поэтому это не наш Путь. В связи с этим хочется предложить пользователям twitter'а (ну и заодно операционных систем семейства GNU/Linux) скрипт, выполнение которого отправляет последнюю введённую в терминале команду в Ваш twitter-аккаунт:

> $любимый_текстовый_редактор twitsh

Скопируем строчки:

0
Ваша оценка: Ничего
ia аватар

обработка аргументов с помощью 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" ;;
	#в противном случае выводим справку по использованию
5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)
ia аватар

настройка приглашений zsh

Бывает так, что, работая бОльшую часть времени только с одной учётной записи и с одного хоста, осознаешь бессмысленность раздутого на пол-экрана терминала приглашения командной строки наподобие

myuseraccount@mycomputer:/path/to/some/folder $

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

5
Ваша оценка: Ничего Рейтинг: 5 (2 голоса)

WCD - Wherever Change Directory

Wcd - тулза для быстрой смены директорий. Позволяет экономить время на наборе. Можно набрать только часть имя директории и программа сама прыгнет в нее. Также поддерживаются регулярные выражения.

0
Ваша оценка: Ничего
ia аватар

Интерактивная apt-оболочка

Бывает так, что длительная работа с apt из терминала немного надоедает и начинает утомлять ввод длинных последовательностей семейства команд apt-*. Однако существует утилита aptsh, которая запускает в терминале интерактивную оболочку для работы с apt. Данная утилита входит в репозитарии многих debian-based дистрибутивов.
Чтобы после установки запустить оболочку, выполните:

$ sudo aptsh

После запуска будет выведено приглашение:

>

Далее можно работать с командами apt, но без необходимости вводить перед ними apt-*. Например, для получения информации о пакете, достаточно выполнить:

> search aptsh

Или, например, чтобы получить исходный код пакета, выполните:

> source aptsh

Выйти из сеанса в shell-оболочку можно командой exit или quit:

> exit

За дополнительной информацией просьба обращаться к соответствующей man-странице.

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)

читалка заголовков писем на 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 не нашел :-)

5
Ваша оценка: Ничего Рейтинг: 5 (2 голоса)
ramok аватар

Где найти ifconfig простому пользователю

Начинающие часто сталкиваются с проблемой того что ifconfig не запускается при работе под обычным пользователем:

$ ifconfig
zsh: command not found: ifconfig
$

И сразу возникает вопрос: "где дать прав/прописать/внести в группу что бы ifconfig запускался".

Ответ:

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)
ramok аватар

Скрипт перевода русских слов набраных в английской расскладке

Многие печатают смотря на клавиатуру и поэтому не сразу замечают что печатают по русски не переключив раскладку. Или у меня когда сижу на с плохим интернетом, то при печати в аське которая на сервере прежде чем видишь что печатаешь, проходит секунд 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
$
0
Ваша оценка: Ничего
ramok аватар

Как узнать размеры терминала в скрипте

Иногда полезно узнать размеры терминала в котором работает ваш скрипт (например при использовании 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
$
0
Ваша оценка: Ничего