Форум русскоязычного сообщества 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 удобней. Если у вас есть свои хитрости на этот счет, добавляйте в комментарии!