Васильев Андрей Михайлович, 2024
Версии презентации
После ввода команды в эмулятора терминала и нажатия клавиши Enter строка передаётся в командный интерпретатор
Общая структура простого запроса интерпретатору
команда --аргумент1 аргумент2 аргумент3Интерпретатор разбивает пришедшую строку на слова по непечатным символам
Команда определяет действие, которое вы хотите выполнить, а аргументы уточняют поведение. Точное воздействие аргументов зависит от разработчиков конкретной команды, один и тот же аргумент по названию может по-разному интерпретироваться
cd меняет рабочий каталог, её необязательный аргумент говорит куда
надо его изменитьtouch создаёт файлы, аргументы указывают какие файлы надо создать и
в каком состоянииВ рамках языка Си приложение получает данные через аргументы функции main:
int main(int argc, char* argv[])argc содержит количество аргументов приложенияargv содержит список ссылок на строкиДля компиляции Си-приложений необходим компилятор языка cc:
cc main.c -o appВ рамках GNU/Linux самым распространённым компилятором является компилятор GNU C Compiler, gcc
Разработчики стремятся снизить свою задачу, а также предоставить пользователям знакомый интерфейс для работы, поэтому используют «стандартные» библиотеки
Для языка Си в GNU/Linux доступны следующие библиотеки для обработки аргументов приложения:
#include <unistd.h>
int getopt(int argc, char * const argv[], const char *optstring);#include <argp.h>
error_t argp_parse (const struct argp *argp, int argc, char **argv,
unsigned flags, int *arg_index, void *input)Другие языки программирования предлагают свои библиотеки, чьё поведение схоже с поведением данных двух библиотек
Команду в Bash можно рассмотреть как вызов функции: на первом месте находится её название, а далее перечислены аргументы
Короткий, однобуквенный ключ: -l, -a
ls -l -a, ls -alКлючи могут:
ls если указан флаг -a, то надо выводить все файлыcal -c 2 2020
-c, количество колонок, принимает в качестве аргумента число 22020 — позиционный, указывает год, для которого надо показать календарьДлинный ключ: --size, --width=100, --months 5
= или указать его после пробелаНекоторые ключи имеют как короткую, так и длинную форму