Рубрики
bash

bash / переменные окружения / потоки / profile / history / alias

Важнейшие переменные окружения

HOME      Путь к домашнему каталогу пользователя
LOGNAME   Имя пользователя
USER      Имя пользователя
MAIL      Путь к почтовому ящику пользователя
PATH      Путь поиска исполняемых файлов
PS1       Вид приглашения оболочки
PWD       Имя текущего каталога
OLDPWD    Имя предыдущего каталога
SHELL     Оболочка, указанная в учетной записи
TERM      Тип терминала
LANG      Тип локализации (локаль)
HOSTNAME  Имя хоста
SHLVL     Номер оболочки (при входе в сеанс — 1, для дочерней — 2 и т. д.)

Переменная окружения PS1

PS1 определяет вид приглашения оболочки
\u устанавливает вывод имени пользователя
\W устанавливает вывод имени текущего каталога
\h отображает в строке приглашения Bash имя хоста

простой пример:
echo $PS1
[\u@\h \W]\$

Пример из debian:
echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$


Механизм продолжения в Bash действует не только для имен файлов и команд.
Если строка начинается с одного из символов: $, ~ или @, то Bash попытается дополнить строку как:
 имя переменной оболочки ($);
 имя пользователя (~);
 имя хоста (@).

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

/etc/profile

Настройки, специфичные для конкретных пользователей, хранятся в одном из файлов домашнего каталога пользователя

~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc

История команд

~/.bash_history
в переменной окружения HISTFILE можно указать другой файл
history

Показать какой файл для сохранения истории используется:
echo $HISTFILE

Ко-во сохроняемых команд в истории (строк)
echo $HISTFILESIZE

history - показать историю выполнненых команд команд
ВНИМАНИЕ ЕСЛИ ПЕРЕД КОМАНДО ПОСТАВИТЬ ПРОБЕЛ ТО В ИСТОРИЮ ОНА НЕ БУДЕТ СОХРОНЕННА
!! - выполнить последнию команду
!555 - выполнить команду под номером 555
!l - история будет просмотрена с конца до тех пор, пока не будет найдена команда с подходящими первыми символами, в данном случае с буквой "l"

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

Команда alias


Многие команды, требуемые в повседневной работе, слишком длинны и неудобны. Для ускорения набора часто повторяющихся сложных команд им можно назначить псевдонимы с помощью встроенной команды alias.
Команда alias, выполненная без аргументов, выводит список всех уже определенных псевдонимов.
alias
Новый псевдоним также создается командой alias.
alias ls='ls --color=tty'
alias vi='vim'
alias ls='ls --color=tty'
alias vi='vim'
alias ll='ls -l'

Текстовые файлы и потоки

стандартный поток ввода (stdin), файловый дескриптор которого — 0
стандартный поток вывода (stdout), файловый дескриптор — 1
стандартный поток вывода ошибок (stderr), файловый дескриптор — 2

Стандартные потоки не надо специально открывать в программах, т. к. они автоматически ассоциируются с процессом при его создании.

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

Перенаправление потоков ввода/вывода:
< — оператор перенаправления стандартного потока ввода
> или 1> — операторы перенаправления стандартного потока вывода
2> — оператор перенаправления стандартного потока вывода ошибок
>> — для перенаправления потока вывода на добавление к файлу
2>> — для перенаправления потока вывода ошибок на добавление к файлу

Эффект замещения старого содержимого файлов, возникающий при перенаправлении в них потоков вывода и ошибок, часто бывает нежелателен.
Оболочка Bash позволяет исключить стирание содержимого файлов при перенаправлении в них потоков вывода или ошибок с помощью команды 
set –o noclobber.

Однако все же есть способ даже при установленной опции noclobber переписать содержимое существующего файла с помощью операции перенаправления вывода или вывода ошибок. 

Для этого можно воспользоваться операторами:
>| — перенаправление потока вывода с гарантированной перезаписью файла
2>| — перенаправление потока ошибок с гарантированной перезаписью файла


Многие команды, работающие с текстом, позволяют использовать поток ввода вместо открытия на чтение файла. 
Для завершения ввода с клавиатуры следует нажать комбинацию клавиш + для передачи в поток ввода символа окончания потока. 
После этого команда, читающая стандартный поток ввода, завершит свою работу, пример:
$ cat > f1
Privet
+
$ cat f1
Privet
В примере команда cat > f1 получила через стандартный ввод текст Privet с клавиатуры, который был записан через стандартный поток вывода в файл f1.


В сценариях оболочки часто возникает необходимость передать блок текста, находящийся непосредственно в тексте сценария, какой-либо команде этого же сценария. 
В таких случаях используют конструкцию here document (документ здесь) - << (два знака "меньше"). 
В таком случае для окончания ввода используется любой удобный символ вместо символа конца файла. 
Этот символ должен быть указан после << и должен быть единственным символом в строке.

cat > file.txt << .
Privet Medved lol
.

cat > file2.txt << "EOF"
Vot escho primer razraz
EOF