Для непосвященных,
bash - командная оболочка по умолчанию во многих Linux-дистрибутивах, включая Fedora, Ubuntu, Redhat и др. Используя операционную систему Linux-семейства, вы, вероятно, используете и bash. По этой причине ниже я собрал несколько часто возникающих проблем с bash и простые способы их решения.
1. Потеря истории команд
Если открыть окно терминала и ввести несколько команд, а после открыть второе окно, то история команд bash во втором окне не будет содержать команд из первого. К тому же, если закрыть первый терминал, а затем второй, то история команд из первого терминала будет перезаписана вторым. Вдвойне неприятно!
Так происходит из-за того, что история команд записывается только при закрытии терминала, а не после каждой команды. Это можно исправить.
Для этого надо отредактировать файл .bashrc (начинающим: любой файл, начинающийся с точки, является скрытым - служит для хранения пользовательских настроек).
nano ~/.bashrc
sudo здесь не нужно, это файл пользователя, а не настройка системы. Мне нравится nano, но можно использовать любой редактор: gedit, kate, mousepad, vi или emacs
добавить строки
shopt -s histappend
PROMPT_COMMAND='history -a'
И сохранить. (Ctrl-O для записи. "^" означает клавишу "Ctrl" в nano и других программах. ^X для выхода)
Так история команд будет добавляться к старой, а не перезаписывать ее, и запись будет происходить каждый раз в момент отображения подсказки bash.
2. Глупые ошибки в написании
Добавьте
shopt -s cdspell
опять-таки в .bashrc. Таким образом ошибки в написании (например, ect вместо etc) будут исправляться.
3. Дубликаты в истории команд
Я часто набираю
cd .. несколько раз подряд, и когда я нажимаю клавишу "вверх", чтобы вернуться к ранее введенным командам, я не хочу, чтобы мне постоянно напоминали о моих неоптимальных передвижениях по файловой системе.
Добавьте
export HISTCONTROL="ignoredups"
опять таки к .bashrc.
Или даже лучше, добавьте
export HISTIGNORE="&:ls:[bf]g:exit"
Это позволит избавиться от дубликатов, а также от
ls,
bg,
fg и
exit, что сделает историю команд bash более читабельной.
4. Разорванные многострочные команды в истории команд
Добавьте
shopt -s cmdhist
в .bashrc, и многострочные команды будут записываться в одну строку, что облегчит редактирование.
5. Пара дополнительных советов от комментаторов
Нажмите Ctrl-R в bash, далее начните набирать команду. Так искать в истории команд гораздо быстрее, чем нажимать 300 раз "вверх".
Также можно искать при помощи
history | grep "foo"
Команда
cd -
осуществляет возврат к последней посещенной директории - бывает полезно, когда нужно перейти куда-то чтобы что-то изменить, а затем быстро вернуться назад.
Нажатие "Esc"+"." вызывает последний упомянутый объект. Например, если набрать
cat /etc/apt/sources.list, а затем
rm и нажать "Esc"+".", то команда будет автоматически завершена:
rm /etc/apt/sources.list. Попробуйте!
Заключение
Вот несколько советов, как сделать историю команд bash удобней. Если у вас есть свои хитрости на этот счет, добавляйте в комментарии!
Via
Linux в digg на русском
комментарии (23)
dcoprefs=`dcop | grep konsole`
for instance in $dcoprefs ;do
shown=`dcop $instance konsole-mainwindow#1 isActiveWindow`
if [ "$shown" == "true" ] ;
then
dcop $instance konsole-mainwindow#1 hide
else
dcop $instance konsole-mainwindow#1 hide
dcop $instance konsole-mainwindow#1 restore
fi
done
Конечно, для максимальной пользы надо бы читать мануалы... но... =)
Поиск по введенному префиксу. То есть набираем "cd " и при нажатии вверх-вниз видим только комманды начинающеися с "cd ". По мне это удобнее чем использовать Ctrl+R
Итак открываем на редактирование файл ~/.inputrc и записываем туда
"\e[A": history-search-backward
"\e[B": history-search-forward
Вот и все.
Второй совет - увеличте размер истории.
export HISTFILESIZE=3000
Много истории не бывает.
добавьте в .bashrc строки
# Extract files from any archive
# Usage: ex <archive_name>
ex () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) rar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via extract()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
Используйте ex _archive_name_.
+33 bash-совета
export HISTTIMEFORMAT='%h.%d %H:%M '
Только я поначалу прочёл 's histappend' неверно?