Получение строки, из которой создаются аргументы argc/argv**, $1, и т. д. (С сохранением кавычек и т. п.)

Модератор: Модераторы разделов

nick87720z
Сообщения: 180
ОС: Gentoo / Calculate

Получение строки, из которой создаются аргументы argc/argv**, $1, и т. д.

Сообщение nick87720z »

Доброго времени суток. Состряпал front-end на bash, который принимает прогу с аргументами в конце, после "--", и передает другой проге через d-bus. Необходимо передать аргументы проги в том же виже, в каком они набраны — с сохранением всех кавычек и других спец. знаков. Строка $@, в которой все аргументы, изначально обработана. Насколько я понимаю, это происходит еще до того, как аргументы передаются моей программе. На C я пока не знаю, какой там аналог $@. Также интересно, насколько это возможно в Python (хоть я его еще даже не учил... на будущее).

Выхожу из положения, используя одинарные кавычки. Разумеется, это не дело — я знаю, что это возможно, и один из известных мне примеров — lash_wrap, написанный на C++.

Нашел там следующее:

Код: Выделить всё

// We strip out all arguments after "--" and concenate them
// to the app_commandline string
        int old_argc = argc;

        for (int i = 0; i < argc; ++i)
        {
                if (std::string (argv[i]) == "--")
                {
                        argc = i;
                        break;
                }
        }
.............................................
 // Ok, let's try to spawn the app
        GPid child_id;
        GError *error;
        if (!(g_spawn_async (NULL, argv + argc + 1, NULL, (GSpawnFlags)(G_SPAWN_SEARCH_PATH|G_SPAWN_DO_NOT_REAP_CHILD), 0, 0, &child_id, &error)))
        {


Попробовал в своем примере первую часть и вывод на печать *(argc + atgc + 1), в результате выводится только первый аргумент. Видимо, оно правильно обрабатывается только в g_spawn_async.
Спасибо сказали: