Как отредактировать bashrc
Перейти к содержимому

Как отредактировать bashrc

  • автор:

Форум русскоязычного сообщества Ubuntu

Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

  • Форум русскоязычного сообщества Ubuntu »
  • Поддержка »
  • Программное обеспечение (Модератор: DoctorRover) »
  • Редактирование .bashrc непойму PS1=». » немного

Страницы: [1] Вниз

Автор Тема: Редактирование .bashrc непойму PS1=». » немного (Прочитано 1211 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Страницы: [1] Вверх

  • Форум русскоязычного сообщества Ubuntu »
  • Поддержка »
  • Программное обеспечение (Модератор: DoctorRover) »
  • Редактирование .bashrc непойму PS1=». » немного

Страница сгенерирована за 0.038 секунд. Запросов: 24.

  • Сайт
  • Об Ubuntu
  • Скачать Ubuntu
  • Семейство Ubuntu
  • Новости
  • Форум
  • Помощь
  • Правила
  • Документация
  • Пользовательская документация
  • Официальная документация
  • Семейство Ubuntu
  • Материалы для загрузки
  • Совместимость с оборудованием
  • RSS лента
  • Сообщество
  • Наши проекты
  • Местные сообщества
  • Перевод Ubuntu
  • Тестирование
  • RSS лента

© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.

Как изменить настройки bashrc суперпользователя в Debian?

Хочу добавить дату и время введённых команд, а так же не записывать в историю команды history. ~/.bachrc изменил, но изменение настроек работает в консоли только непривилегированного пользователя. Где храниться файл настроек bashrc суперпользователя?

just_a_brake
18.09.18 05:20:30 MSK

sudo bash -c ‘echo $HOME’

MyTrooName ★★★★★
( 18.09.18 05:29:53 MSK )
anonymous
( 18.09.18 05:31:06 MSK )
Ответ на: комментарий от anonymous 18.09.18 05:31:06 MSK
just_a_brake
( 18.09.18 05:32:11 MSK ) автор топика
Ответ на: комментарий от just_a_brake 18.09.18 05:32:11 MSK

cp /etc/skel/.bash_profile /root cp /etc/skel/.bashrc /root

anonymous
( 18.09.18 05:34:38 MSK )
Ответ на: комментарий от anonymous 18.09.18 05:34:38 MSK

cp /etc/skel/.bash_profile /root cp /etc/skel/.bashrc /root 

Зачем их так много?! Куда редактировать то..

just_a_brake
( 18.09.18 05:36:10 MSK ) автор топика
Ответ на: комментарий от just_a_brake 18.09.18 05:36:10 MSK

Чтобы исключить вопрос: «Откуда взять, куда положить?»

anonymous
( 18.09.18 05:49:45 MSK )
Ответ на: комментарий от just_a_brake 18.09.18 05:36:10 MSK

/etc/skel — это шаблон для создания нового пользователя. Редактировать надо /root/.bashrc

legolegs ★★★★★
( 18.09.18 08:55:19 MSK )

~/.bachrc это же путь переводит в хомяк текущего пользователя 🙂

darkenshvein ★★★★★
( 18.09.18 09:16:34 MSK )
Ответ на: комментарий от darkenshvein 18.09.18 09:16:34 MSK

Точно, и как мне сюда дописать HISTTIME, HISTIGNORE и прочее?

# ~/.bashrc: executed by bash(1) for non-login shells. # Note: PS1 and umask are already set in /etc/profile. You should not # need this unless you want different defaults for root. # PS1='$\h:\w\$ ' # umask 022 # You may uncomment the following lines if you want `ls' to be colorized: # export LS_OPTIONS='--color=auto' # eval "`dircolors`" # alias ls='ls $LS_OPTIONS' # alias ll='ls $LS_OPTIONS -l' # alias l='ls $LS_OPTIONS -lA' # # Some more alias to avoid making mistakes: # alias rm='rm -i' # alias cp='cp -i' # alias mv='mv -i' 

just_a_brake
( 18.09.18 09:35:05 MSK ) автор топика
Ответ на: комментарий от just_a_brake 18.09.18 09:35:05 MSK

текстовым редактором? если просто, то nano, если надо удобно, то joe

darkenshvein ★★★★★
( 18.09.18 09:46:10 MSK )
Последнее исправление: darkenshvein 18.09.18 09:46:21 MSK (всего исправлений: 1)

Ответ на: комментарий от darkenshvein 18.09.18 09:46:10 MSK

А всё, посмотрел, работает. Там не написано сколько команд сохраняется в history. Bashrc их всех сохраняет?

just_a_brake
( 18.09.18 09:53:24 MSK ) автор топика
Ответ на: комментарий от just_a_brake 18.09.18 09:53:24 MSK

# append to the history file, don’t overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

вот для настройки хистори. выше — перезаписывать или нет, ниже размер журнала

darkenshvein ★★★★★
( 18.09.18 09:56:40 MSK )
Ответ на: комментарий от darkenshvein 18.09.18 09:56:40 MSK

Про размер журнала я понял, а что значит перезаписывать? И ещё в настройках суперпользовательского bashrc нет HISTSIZE и HISTFILES по-умолчанию.

Bash (Русский)/Prompt customization (Русский)

Состояние перевода: На этой странице представлен перевод статьи Bash/Prompt customization. Дата последней синхронизации: 10 июля 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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

Приглашения

Bash имеет четыре строки приглашения, каждая из которых может быть настроена.

  • PS1 — основное приглашение, которое отображается перед каждой командой; по этой причине модифицируется чаще всего.
  • PS2 — второе приглашение, отображается, если команде требуются дополнительные данные для ввода (например, в случае многострочных команд).
  • PS3 — используется довольно редко. Отображается при работе встроенной команды Bash select , выводящей интерактивное меню. В отличие от остальных приглашений, не раскрывает escape-последовательности Bash. Обычно все изменения применяются непосредственно в скрипте, содержащем select , а не в файле .bashrc .
  • PS4 — также используется редко. При отладке скриптов показывает уровни вложенности — первый символ приглашения повторяется столько раз, сколько на данный момент задействовано уровней.

Настройка конкретного приглашения подразумевает присваивание (обычно в файле ~/.bashrc ) необходимой строки в переменную, например:

Техники

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

Escape-последовательности Bash

При выводе строки приглашения Bash ищет экранированные символом слэша символы (escape-последовательности) и конвертирует их в специальные строки. Например, \u превратится в имя пользователя, а \A — в текущее время. Таким образом, если переменной PS1 присвоить ‘\A \u $ ‘ , то приглашение будет выглядеть как 17:35 пользователь $ .

Полный список escape-последовательностей можно найти в руководстве bash(1) § PROMPTING и в справочнике Bash.

Escape-последовательности terminfo

Помимо escape-последовательностей, которые понимает Bash, большинство терминалов также распознают специальные последовательности, которые влияют на терминал сам по себе, а не на печатаемые символы. Например, так можно изменить цвет строки символов, сдвинуть курсор в произвольную позицию или очистить экран. Эти последовательности могут быть довольно неудобными и варьируются от терминала к терминалу, поэтому они задокументированы в базе данных terminfo. Чтобы увидеть, какие свойства поддерживает ваш терминал, выполните:

$ infocmp

Значение свойств можно найти в terminfo(5) по их названиям (часть перед =). Например, свойство setaf настраивает цвет шрифта для всего текста, который будет напечатан после него. Узнать escape-код свойства можно командой tput . Например,

$ tput setaf 2

выведет escape-последовательности для настройки зелёного цвета шрифта.

Примечание: Если команда tput не работает, убедитесь, что значение TERM имеет верное значение для вашего терминала. Например, если установлено значение xterm вместо xterm-256color , то tput setaf будет работать только с номерами цветов 0-7.

На практике, чтобы использовать эти возможности в приглашении командной строки, можно использовать подстановку команд Bash и интерполяцию строк. Например:

GREEN="\[$(tput setaf 2)\]" RESET="\[$(tput sgr0)\]" PS1="$my prompt$> "

Примечание: Руководство Bash рекомендует «обернуть» вывод tput в \[ \] . Это поможет Bash правильно учитывать непечатаемые символы при вычислении длины приглашения. При подстановке команд это не работает, поэтому используйте значения \1 \2 .

Escape-последовательности ANSI

К сожалению, ANSI-последовательности могут отсутствовать в базе terminfo вашего терминала. Чаще всего это касается последовательностей для новейших возможностей вроде поддержки 256 цветов. В этом случае использовать tput не получится и придётся вводить escape-последовательности вручную.

Примеры escape-последовательностей можно найти в статье Управляющие последовательности ANSI. Каждая последовательность начинается с литерала escape-последовательности, которую вы можете ввести с помощью escape-последовательности Bash \e . Например, \e[48;5;209m задаст персиковый цвет фона (если есть поддержка 256 цветов), а \e[2;2H сдвинет курсор в левый верхний угол экрана.

В случаях, когда escape-последовательности Bash не поддерживаются (как в приглашении PS3), их можно добавить командой printf:

ESC=$(printf "\e") PEACH="$ESC[48;5;209m"

Встроенные команды

Если вы хотите добавить вывод какой-нибудь команды в приглашение, то используйте подстановку команд (command substitution). Например, чтобы добавить величину свободной памяти к приглашению попробуйте что-то вроде:

PS1="$(awk '/MemFree/' /proc/meminfo) prompt > "
53718 prompt > 53718 prompt > 53718 prompt >

Как видно, это работает не совсем корректно — значение памяти всегда одно и то же! Причина — команда выполняется только один раз при первой настройке PS1. Необходимо предотвратить подстановку либо экранированием символа $ , либо определением строки в одиночных кавычках — в обоих случаях подстановка будет производиться каждый раз при настоящем отображении приглашения:

PS1="\$(awk '/MemFree/' /proc/meminfo) prompt > " # или PS1='$(awk "/MemFree/" /proc/meminfo) prompt > '

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

free_mem() < awk '/MemFree/' /proc/meminfo > PS1='$(free_mem) prompt > '

Примечание: В подстановочных функциях можно использовать escape-последовательности terminfo/ANSI, но не последовательности Bash. В частности, \[ \] не будет работать при обрамлении ими строки с непечатаемыми символами. Вместо этого используйте восьмеричные экранированные последовательности \001 и \002 (например, в командах printf или echo -e ).

PROMPT_COMMAND

Переменной PROMPT_COMMAND можно присвоить произвольную команду, которая будет выполняться непосредственно перед выводом PS1. Это позволяет создавать довольно мощные эффекты. Например, можно переназначить PS1 на основе некоторых условий, или выполнить какие-то действия с историей Bash при выполнении любой команды.

Важно: PROMPT_COMMAND не должна использоваться для вывода символов непосредственно в приглашение. Символы, напечатанные вне PS1, не учитываются Bash, что может привести к неправильному позиционированию курсора и обычных символов. Либо используйте PROMPT_COMMAND для задания PS1, либо изучите рекомендации в разделе #Встроенные команды.

Совет: Если PROMPT_COMMAND стала слишком сложной, bash-preexec (реализация хук-функций preexec и precmd Zsh для Bash) может упростить работу с ней.

Escape-последовательности между вводом и выводом

Свойства вводимого текста можно изменить, «забыв» отключить свойства в конце PS1. Например, если вставить tput blink в конец PS1, то вводимые команды будут мерцать. Тем не менее, этот эффект также перейдёт и на вывод команды, поскольку свойства не отключаются при нажатии Enter .

Чтобы вставить escape-последовательность после ввода, но перед началом вывода, можно перехватить (trap) Bash-сигнал DEBUG, который посылается перед выполнением каждой команды:

$ trap 'tput sgr0' DEBUG

Настройка приглашения root

Для удобства можно сделать приглашение командной строки root-пользователя визуально отличным от обычного (возможно, мерцающий красный цвет?). Настройка приглашения производится как обычно, но в домашнем каталоге суперпользователя, /root . Начните с копирования шаблонов /etc/skel/.bash_profile и /etc/skel/.bashrc в каталог /root , после чего внесите в файл /root/.bashrc необходимые изменения.

Примеры

Цвета

Совет: Вывод infocmp содержит доступное для tput количество цветов, например — colors#8 .

Увидеть все цвета вашего терминала можно с помощью простого цикла (замените setab на setaf , если нужен цвет текста, а не фона):

for C in ; do tput setab $C echo -n "$C " done tput sgr0 echo

Если это не работает (причём установлено правильное значение TERM), протестируйте вручную разные последовательности:

# стандартные цвета for C in ; do echo -en "\e[$m$C " done # цвета высокой интенсивности for C in ; do echo -en "\e[$m$C " done # 256 цветов for C in ; do echo -en "\e[48;5;$m$C " done echo -e "\e(B\e[m"

Аналогичные значения для текста (не фона): стандартные — 30..37 , высокая интенсивность — 90..97 , а для 256 цветов замените 48 на 38.

Основные свойства

Следующие свойства terminfo будут полезны при настройке приглашения и поддерживаются во многих терминалах. #1 и #2 необходимо заменить на числовые аргументы.

Свойство Escape-последовательность Описание
Свойства текста
blink \E[5m мерцающий тект вкл
bold \E[1m полужирный текст вкл
dim \E[2m тусклый текст вкл
rev \E[7m обратное отображение вкл (текст/фон меняются цветами)
sitm \E[3m курсив вкл
ritm \E[23m курсив выкл
smso \E[7m выделение текста вкл
rmso \E[27m выделение текста выкл
smul \E[4m подчёркивание вкл
rmul \E[24m подчёркивание выкл
setab #1 \E[4#1m задать цвет фона #1 (0-7)
setaf #1 \E[3#1m задать цвет текста #1 (0-7)
sgr0 \E(B\E[m отключить все атрибуты текста
Перемещение курсора
sc \E7 сохранить позицию курсора
rc \E8 вернуть курсор в сохранённую позицию
clear \E[H\E[2J очистить экран и переместить курсор в левый верхний угол
cuu #1 \E[#1A переместить курсор вверх на #1 строк
cud #1 \E[#1B переместить курсор вниз #1 строк
cuf #1 \E[#1C переместить курсор вправо #1 столбцов
cub #1 \E[#1D переместить курсор влево #1 столбцов
home \E[H переместить курсор в левый верхний угол окна
hpa #1 \E[#1G переместить курсор в столбец #1
vpa #1 \E[#1d переместить курсор в строку #1, первый столбец
cup #1 #2 \E[#1;#2H переместить курсор в строку #1, столбец #2
Удаление символов
dch #1 \E#1P удалить #1 символов (аналогично нажатию клавиши backspace)
dl #1 \E#1M удалить #1 строк
ech #1 \E#1X стереть #1 символов (без перемещения курсора)
ed \E[J очистить до нижнего края экрана
el \E[K очистить до конца строки
el1 \E[1K очистить до начала строки

Отображение кода выхода

Тем же приёмом, как в случае встроенных команд, можно отложить интерполяцию специальной переменной Bash вроде $? . Следующие приглашения будут содержать код выхода предыдущей команды:

PS1="\$? > " # или PS1='$? > '

0 > true
0 > false
1 >

Это можно сделать с помощью условных выражений и функций:

exitstatus() < if [[ $? == 0 ]]; then echo ':)' else echo 'D:' fi >PS1='$(exitstatus) > '

🙂 > true
🙂 > false
D: >

Позиционирование курсора

Курсор можно перемещать по экрану во время нахождения «внутри» приглашения PS1, чтобы разные части приглашения появлялись в разных местах. Важный момент — после всех перемещений и вывода символов в любых местах экрана курсор необходимо вернуть в исходную позицию. Это можно сделать с помощью свойств sc и rc , которые сохраняют и восстанавливают позицию курсора соответственно. Общая схема приглашения, содержащего перемещения курсора:

Весь блок с перемещениями курсора обёрнут в \[ \] , чтобы Bash не учитывал непечатаемые символы как часть приглашения.

Выравнивание по правому краю

Простейший способ напечатать текст у правого края экрана — использовать printf:

rightprompt() < printf "%*s" $COLUMNS "right prompt" >PS1='\[$(tput sc; rightprompt; tput rc)\]left prompt > '

left prompt > right prompt

Здесь задано поле %*s переменной длины с выравниванием по правому краю. Размер поля равен текущему количеству столбцов в терминале ( $COLUMNS ).

Произвольное позиционирование

Свойство cup перемещает курсор в конкретную позицию экрана, например, tput cup 20 5 переместит курсор на строку 20, столбец 5 (координаты 0 0 обозначают верхний левый угол). cuu , cud , cuf и cub (вверх, вниз, вперёд, назад) перемещают курсор относительно текущей позиции. Например, tput cuf 10 переместит курсор на 10 символов вправо. В аргументах можно использовать переменные LINES и COLUMNS , если требуется переместить курсор относительно нижнего и правого краёв окна. Например, перемещение на 10 строк и 5 столбцов от правого нижнего угла:

$ tput cup $((LINES - 11)) $((COLUMNS - 6))

Настройка названия окна терминала

Название окна терминала можно настроить так же, как и приглашение: выводом escape-последовательностей в оболочке. Часто пользователи встраивают настройки названия окна в своё приглашение. Технически это возможность xterm, но и другие современные терминалы её поддерживают. В этом случае используют последовательности ESC]2;новое названиеBEL , где ESC и BEL — символы escape (выход) и bell (сигнал). С последовательностями Bash приглашение с встроенным названием окна будет иметь вид:

PS1='\[\e]2;новое название\a\]prompt > '

Само собой, строка названия окна может включать вывод встроенных команд или переменные вроде $PWD , так что она может перенастраиваться после каждой команды.

Смотрите также

  • Примеры и скриншоты на теме форума: What’s your PS1? (доступно только после входа)
  • Файл /etc/bash/bashrc для Gentoo; см. также gentoo-bashrcAUR
  • tput(1)
    • Цвета и перемещение курсора с tput

    Советы и подсказки по bash

    Для непосвященных, bash — командная оболочка по умолчанию во многих Linux-дистрибутивах, включая Fedora, Ubuntu, Redhat и др. Используя операционную систему Linux-семейства, вы, вероятно, используете и bash. По этой причине ниже я собрал несколько часто возникающих проблем с bash и простые способы их решения.

    1. Потеря истории команд

    Если открыть окно терминала и ввести несколько команд, а после открыть второе окно, то история команд bash во втором окне не будет содержать команд из первого. К тому же, если закрыть первый терминал, а затем второй, то история команд из первого терминала будет перезаписана вторым. Вдвойне неприятно!

    Так происходит из-за того, что история команд записывается только при закрытии терминала, а не после каждой команды. Это можно исправить.

    Для этого надо отредактировать файл .bashrc (начинающим: любой файл, начинающийся с точки, является скрытым — служит для хранения пользовательских настроек).

    sudo здесь не нужно, это файл пользователя, а не настройка системы. Мне нравится nano, но можно использовать любой редактор: gedit, kate, mousepad, vi или emacs

    shopt -s histappend

    И сохранить. (Ctrl-O для записи. «^» означает клавишу «Ctrl» в nano и других программах. ^X для выхода)

    Так история команд будет добавляться к старой, а не перезаписывать ее, и запись будет происходить каждый раз в момент отображения подсказки bash.

    2. Глупые ошибки в написании

    shopt -s cdspell

    опять-таки в .bashrc. Таким образом ошибки в написании (например, ect вместо etc) будут исправляться.

    3. Дубликаты в истории команд

    Я часто набираю cd .. несколько раз подряд, и когда я нажимаю клавишу «вверх», чтобы вернуться к ранее введенным командам, я не хочу, чтобы мне постоянно напоминали о моих неоптимальных передвижениях по файловой системе.

    опять таки к .bashrc.

    Или даже лучше, добавьте

    Это позволит избавиться от дубликатов, а также от ls , bg , fg и exit , что сделает историю команд bash более читабельной.

    4. Разорванные многострочные команды в истории команд

    shopt -s cmdhist

    в .bashrc, и многострочные команды будут записываться в одну строку, что облегчит редактирование.

    5. Пара дополнительных советов от комментаторов

    Нажмите Ctrl-R в bash, далее начните набирать команду. Так искать в истории команд гораздо быстрее, чем нажимать 300 раз «вверх».

    Также можно искать при помощи

    history | grep «foo»

    осуществляет возврат к последней посещенной директории — бывает полезно, когда нужно перейти куда-то чтобы что-то изменить, а затем быстро вернуться назад.

    Нажатие «Esc»+».» вызывает последний упомянутый объект. Например, если набрать cat /etc/apt/sources.list , а затем rm и нажать «Esc»+».», то команда будет автоматически завершена: rm /etc/apt/sources.list . Попробуйте!

    Заключение

    Вот несколько советов, как сделать историю команд bash удобней. Если у вас есть свои хитрости на этот счет, добавляйте в комментарии!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *