Домашнее задание №1
Задания выполняются на kodomo. После выполнения всех заданий нужно записаться в очередь на проверку (ссылка сверху на странице курса). Дедлайн – 01:00 AM (час ночи) 3 ноября.
1. Настройка bash
Задача: настроить параметры хранения истории команд и пути поиска исполняемых файлов.
Bash использует несколько файлов конфигурации в зависимости от способа запуска. Прочитайте раздел INVOCATION на man-странице bash(1), который описывает процедуру выбора файлов. Файлы конфигурации – это обычные cценарии, которые bash исполняют при запуске. Выполнить сценарий в контексте текущего процесса можно с помощью встроенной команды (builtin) . или source. Файлы конфигурации могут использовать эту команду, чтобы включить в себя другие файлы конфигурации. Обязательно проверьте, какие из упомянутых в справке файлов существуют, и какие инструкции содержат. Только после этого получится определить, в какой из файлов лучше вносить изменения, чтобы не испортить стандартную конфигурацию.
a) Настройка истории команд
Bash хранит историю введенных в интерактивном режиме команд в файле ~/.bash_history. Ряд переменных окружения, имена которых содержат HIST, позволяют настроить этот процесс. Нужные переменные и их описание можно найти в подразделе Shell Variables раздела PARAMETERS страницы bash(1). Используйте встроенный в less поиск!
Вам надо добиться, чтобы bash
использовал режим ignoreboth (заодно узнайте, что это означает);
- сохранял до десяти тысяч последних команд и записывал временные метки.
Формат вывода времени с помощью встроенной команды history выберите любой.
b) Настройка PATH
Переменная окружения PATH содержит список имен папок, разделенных двоеточиями, в которых bash ищет исполняемые файлы, соответствующие введенным командам. Подробнее в разделе COMMAND EXECUTION man-страницы bash(1). Папки просматриваются слева направо, используется первое найденное совпадение. Поэтому папки с исполняемыми файлами, которые должны предпочитаться системным при совпадении имен, должны быть в списке раньше системных папок, и наоборот.
Вам надо изменить конфигурацию bash, чтобы в любой интерактивной сессии он
предпочитал исполняемые файлы из папки ~/exe всем остальным, если такая папка существует;
не искал исполняемые файлы в папке ~/.local/bin, если только такое поведение не задано в системных файлах конфигурации.
2. Добавление опций команде which
Сценарий which позволяет определить, какой исполняемый файл соответствует команде с заданным именем.
Задача: добавить команде which две полезные опции. Для этого потребуется найти исполняемый файл which, скопировать его в папку ~/exe и отредактировать. Нужно будет разобраться со всеми конструкциями, содержащимися в сценарии, включая присвоения, функции, встроенные команды [, shift, getopts и составные команды while, for, case и if. Новые опции должны менять только формат выдачи, сами выдаваемые объекты должны оставаться теми же. В частности, опция -a должна сохраниться.
a) Изменение интерпретатора
Изначально which – это сценарий sh (роль которого на kodomo исполняет dash). Bash по большей части является sh-совместимым, но содержит дополнительный функционал. Вам нужно будет сделать так, чтобы при вызове which запускался bash. После этого нужно удалить или модифицировать все части оригинального сценария, написанные на случай запуска другим интерпретатором.
b) Опция -l (эл)
С этой опцией все выданные имена файлов, являющихся символическими ссылками, должны дополняться символами -> с последующим адресом ссылки в виде, в котором его выдает программа readlink.
$ which 'sh'
/bin/sh
$ readlink '/bin/sh'
dash
$ which -l 'sh'
/bin/sh -> dash
c) Опция -r
С этой опцией все выданные имена файлов, являющихся символическими ссылками, должны дополняться символами -> с последующим адресом реального исполняемого файла, на который указыет ссылка или цепочка ссылок, в виде, в котором его выдает программа realpath.
$ which 'which'
/usr/bin/which
$ which -l 'which'
/usr/bin/which -> /etc/alternatives/which
$ which -r 'which'
/usr/bin/which -> /usr/bin/which.debianutils
Опция -r должна иметь приоритет, если указана одновременно с опцией -l.
