Shell-related Utilities

Shell-related Utilities — shell-подобная обработка командной строки.

Краткое описание

#include <glib.h> enum GShellError; #define G_SHELL_ERROR gboolean g_shell_parse_argv (const gchar *command_line, gint *argcp, gchar ***argvp, GError **error); gchar* g_shell_quote (const gchar *unquoted_string); gchar* g_shell_unquote (const gchar *quoted_string, GError **error);

Описание

Детали

enum GShellError

typedef enum { /* несоответствие или иначе искажённое квотирование */ G_SHELL_ERROR_BAD_QUOTING, /* анализируемая строка пустая */ G_SHELL_ERROR_EMPTY_STRING, G_SHELL_ERROR_FAILED } GShellError;

Коды ошибок возвращаемые функциями оболочки (shell functions).

G_SHELL_ERROR_BAD_QUOTING Несоответствие или искажённое квотирование.
G_SHELL_ERROR_EMPTY_STRING Анализируемая строка пустая.
G_SHELL_ERROR_FAILED Некоторые другие ошибки.

G_SHELL_ERROR

#define G_SHELL_ERROR g_shell_error_quark ()

Домен ошибки для функций оболочки. Ошибки в этом домене из перечисления GShellError. Смотрите GError для информации о доменах ошибки.


g_shell_parse_argv ()

gboolean g_shell_parse_argv (const gchar *command_line, gint *argcp, gchar ***argvp, GError **error);

Анализирует командную строку в одномерном массиве параметров, аналогичным с shell способом, но без многих расширений выполняемых shell (переменные, globs, операторы, расширение файлового имени, и т.д. не поддерживаются). Результат определяется в том же самом стиля как вы могли бы получить из UNIX98 /bin/sh, пока ввод не содержит не поддерживаемых shell расширений. Если ввод содержит такие расширения, они помещаются буквально. Возможные ошибки происходят из G_SHELL_ERROR домена. Освобождается одномерный массив с помощью g_strfreev().

command_line : анализируемая командная строка
argcp : расположение возвращаемого количества аргументов
argvp : расположение возвращаемого массива аргументов
error : расположение возвращаемой ошибки
Возвращает : TRUE при успешном выполнении, FALSE если установлена ошибка

g_shell_quote ()

gchar* g_shell_quote (const gchar *unquoted_string);

Квотирует строку так чтобы оболочка (/bin/sh) интерпретировала её как unquoted_string. Если вы поместите имя файла в оболочку, например, вы должны сначала квотировать его с помощью этой функции. Возвращаемое значение должно освобождаться с помощью g_free(). Используемый стиль квотирования не определён (могут использоваться или одинарные или двойные кавычки).

unquoted_string : строка литерал
Возвращает : квотированная строка

g_shell_unquote ()

gchar* g_shell_unquote (const gchar *quoted_string, GError **error);

Снимает квотирование строки как если бы это сделала оболочка (/bin/sh). Обрабатывает кавычки только; если строка содержит file globs, арифметические операторы, переменные, обратные кавычки, переназначения, или другие специальные shell особенности, результат будет отличаться от реального результата который дала бы shell (переменные, обратные кавычки, и т.д. будут помещены как литералы вместо интерпретации). Эта функция гарантировано завершается успешно если применяется результат g_shell_quote(). Если она завершилась неудачей, то возвращает NULL и устанавливает ошибку. quoted_string не должен фактически содержать кавычки или escaped текст; g_shell_unquote() просто проходит через строку и снимает квотирование (unquotes/unescapes) как если бы это сделала shell-оболочка. Обрабатываются и двойные и одинарные кавычки, а так же escapes включая завершающий символ новой строки. Возвращаемое значение должно освобождаться с помощью g_free(). Возможные ошибки находятся в домене G_SHELL_ERROR.

Shell правила квотирования немного странные. Единственные кавычки сохраняют литеральную строку в точности. escape-последовательность не допускается; даже \' - если вы хотите иметь ' в квотированном тексте, вы можете сделать примерно так 'foo'\''bar'. Двойные кавычки позволяют $, `, ", \, и символ новой строки выделять обратным слэшем. Иначе двойные кавычки сохраняют всё буквально.

quoted_string : shell-quoted строка
error : расположение для возвращаемой ошибки или NULL
Возвращает : unquoted строка