Васильев Андрей Михайлович, 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
, количество колонок, принимает в качестве аргумента число 2
2020
— позиционный, указывает год, для которого надо показать календарьДлинный ключ: --size
, --width=100
, --months 5
=
или указать его после пробелаНекоторые ключи имеют как короткую, так и длинную форму