Показаны сообщения с ярлыком bash. Показать все сообщения
Показаны сообщения с ярлыком bash. Показать все сообщения

пятница, 6 августа 2010 г.

Игнорировать псевдоним в bash?

Если у вас есть некий псевдоним, например,
$ alias aptitude='sudo aptitude'
То, оказывается, а я даже не знал, можно его проигнорировать, написав перед псевдонимом обратный слеш:
$ \aptitude
Хотя, конечно, можно было бы сделать это и с помощью указания полного пути:
$ /usr/bin/aptitude
Но все-таки вариант со слешем короче.

Что важно, псевдоним не дает никакого эффекта в скриптах, потому что алиасы работают только в интерактивной оболочке.

вторник, 13 июля 2010 г.

Фишки bash, которые помогут иногда не пользоваться sed

Аналог echo $VAR | sed -e 's/.txt$/.htm/' - если нужно сменить расширение файла, например
stasikos@pip-boy4000:~$ VAR=something.txt
stasikos@pip-boy4000:~$ echo ${VAR/.txt/.htm}
something.htm

Или совсем убрать
stasikos@pip-boy4000:~$ echo ${VAR%.txt}
something

Поменять регистр символов
stasikos@pip-boy4000:~$ echo ${VAR^^}
SOMETHING.TXT

stasikos@pip-boy4000:~$ VAR=SoMeThInG.txt
stasikos@pip-boy4000:~$ echo ${VAR,,}
something.txt

Теперь немножко про удобную замену такой вещи как
if [ -z "$VAR" ] ; then ...
fi

stasikos@pip-boy4000:~$ VAR=some
stasikos@pip-boy4000:~$ echo ${VAR:-default_value}
some
stasikos@pip-boy4000:~$ VAR=''
stasikos@pip-boy4000:~$ echo ${VAR:-default_value}
default_value
Это можно использовать при чтении, скажем, конфигурационного файла для скрипта, или для определения дефолтных значений при отсутствии значений переменных окружения

Или выкинуть ошибку если значение переменной не установлено:
stasikos@pip-boy4000:~$ echo ${VAR:?was not configured}
bash: VAR: was not configured

Больше интересного чтива можно найти в man bash по словам "Parameter Expansion"

понедельник, 6 апреля 2009 г.

Отладка shell-скриптов

stasikos@stasikos-laptop:~$ cat test.sh 
#!/bin/bash

if [ "A$1" = "AA" ] ; then
echo "A!"
else
echo "B!"
fi
stasikos@stasikos-laptop:~$ sh -x test.sh A
+ [ AA = AA ]
+ echo A!
A!
stasikos@stasikos-laptop:~$ sh -x test.sh
+ [ A = AA ]
+ echo B!
B!
stasikos@stasikos-laptop:~$


Аналогично можно вставить set -x или set +x в любом месте скрипта, чтобы включить или выключить отладку.

Very useful, как говорится.

пятница, 11 июля 2008 г.

Убрать мусор в history, который добавляет mc

После применения предыдущего типса про "вечную" историю команд в bash, пользователи mc находят мусор в своих файлах истории. Мусором туда гадит mc.
Этот мусор выглядит примерно так:

414 mc
415 PROMPT_COMMAND='pwd>&7;kill -STOP $$'
416 cd "`printf "%b" '\0057home\0057stasikos\0057video\0057FLV\0057MOBILE'`"
417 cd "`printf "%b" '\0057home\0057stasikos'`"

Единственное избавление от этого - заигнорить те строки, которые он туда добавляет:
(в .bashrc)
export HISTIGNORE="&:ls:[bf]g:exit: cd \"\`*: PROMPT_COMMAND=?*?"


via коммент у Tigra.info

P.S. (UPD) а еще там же, у тигро.инфо, есть намного более красивое решение
export HISTCONTROL=ignoreboth

которое можно добавить как в .bashrc, так и в bashrc для mc, который находится в ~/.mc/bashrc. Это аналог "ignorespace + ignoredups", который не дает задваивать команды в history и не добавляет туда команды, начинающиеся с пробела.

Кстати, отсюда выплывает еще один типс - при включении этой опции в своем ~/.bashrc, можно намеренно поставить пробел перед командой и она не сохранится в истории. Вдруг она конфиденциальна. )

воскресенье, 29 июня 2008 г.

Листинг имен файлов по маске горячей клавишей в bash

как-то захотелось просмотреть абстрактный jpeg из домашнего каталога программой display.

Ну, как обычно, тыкаю
$ display <tab>

И понимаю, что что-то тут не так, и выбирать из 200-300 файлов любой жпег не очень-то удобно.

Роемся в man bash. )

$ display *.jpg<Esc-g>

(или Alt-g, или Ctrl-x, g - для просто списка без дополнения)

Нажатием Ctrl-x * можо и вовсе вместо табкомплита поместить все имена файлов по маске в командную строку.

среда, 21 мая 2008 г.

Как не терять историю команд?

Часто бывает, что мы пользуемся шеллом одновременно из нескольких открытых окон терминала. При этом не менее часто бывает, что удобную и длинную команду из истории шелла из одного терминала случайно затерла история шелла из другого терминала. Избежать этого может помочь добавление следующих строк в .bashrc:



shopt -s histappend
PROMPT_COMMAND='history -a; history -n'





Первая опция заставляет шелл не перезаписывать файл истории, а добавлять записи в него. Вторая команда будет вызывать добавление содержимого истории в файл и перечитывание файла истории сразу при выводе приглашения командной строки, а не после выхода из шелла.



("Кросспост" с Полезные советы по Linux)