LINUX.ORG.RU

История изменений

Исправление debugger, (текущая версия) :

И вот ты предложил вместо ssh(quote_args(argv)) сделать ssh(’/script ’ + quote_args(argv)).

Нет, ты ничего не понял. Абсолютно ничего.

То есть для самого использования твоего скрипта нужно предварительно произвести экранирование и превратить a’b"c в какое-нибудь «a’b"c».

Производить экранирование для запуска моего скрипта нужно если ты запускаешь его из шелла, т. к. в шелле апостроф, кавычки, пробел и конец строки — специальные символы. Это естественно.

Если ты запускаешь его из программы на сях:

char * cmd_with_args[] = {
    "with space",
    "with'apostrophe",
    "with\"quote",
    "with\nnewline",
    NULL,
};
execve(".../remote.sh", cmd_with_args, NULL);

Как видишь, даже в сях приходится экранировать кавычки и конец сроки — это обычные правила того языка, на котором ты пишешь программу. Но при этом тебе не надо знать правила шелла, и, например, экранировать пробелы и апострофы, т. к. remote.sh сам выполнит эту задачу, и передаст все параметры на удалённую систему ровно в том виде, в котором он их сам получил.

Все параметры из массива args будут переданы на удалённую машину как есть, с сохранением пробелов, кавычек, апострофов, концов строк и любой оргии в любой комбинации.

Говорят, можно дать человеку книгу, можно даже заставить её прочитать, но невозможно заставить её понять.

Так нет execve-like интерфейса у ssh-библиотек из-за дебильности протокола, услышь ты уже наконец.

Извини, но это не у ssh-библиотек дебильность.

Исправление debugger, :

И вот ты предложил вместо ssh(quote_args(argv)) сделать ssh(’/script ’ + quote_args(argv)).

Нет, ты ничего не понял. Абсолютно ничего.

То есть для самого использования твоего скрипта нужно предварительно произвести экранирование и превратить a’b"c в какое-нибудь «a’b"c».

Производить экранирование для запуска моего скрипта нужно если ты запускаешь его из шелла, т. к. в шелле апостроф, кавычки, пробел и конец строки — специальные символы. Это естественно.

Если ты запускаешь его из программы на сях:

char * cmd_with_args[] = {
    "with space",
    "with'apostrophe",
    "with\"quote",
    "with\nnewline",
    NULL,
};
execve(".../remote.sh", cmd_with_args, NULL);

Как видишь, даже в сях приходится экранировать кавычки и конец сроки — это обычные правила того языка, на котором ты пишешь программу. Но при этом тебе не надо знать правила шелла, и, например, экранировать пробелы и апострофы. remote.sh сам выполнит эту задачу, и передаст все параметры ровно в том виде, в котором он их сам получил.

Все параметры из массива args будут переданы на удалённую машину как есть, с сохранением пробелов, кавычек, апострофов, концов строк и любой оргии в любой комбинации.

Говорят, можно дать человеку книгу, можно даже заставить её прочитать, но невозможно заставить её понять.

Так нет execve-like интерфейса у ssh-библиотек из-за дебильности протокола, услышь ты уже наконец.

Извини, но это не у ssh-библиотек дебильность.

Исходная версия debugger, :

И вот ты предложил вместо ssh(quote_args(argv)) сделать ssh(’/script ’ + quote_args(argv)).

Нет, ты ничего не понял. Абсолютно ничего.

То есть для самого использования твоего скрипта нужно предварительно произвести экранирование и превратить a’b"c в какое-нибудь «a’b"c».

Производить экранирование для запуска моего скрипта нужно только если ты запускаешь его из шелла, т. к. в шелле апостроф, кавычки, пробел и конец строки — специальные символы. Это естественно.

Если ты запускаешь его из программы на сях:

char * cmd_with_args[] = {
    "with space",
    "with'apostrophe",
    "with\"quote",
    "with\nnewline",
    NULL,
};
execve(".../remote.sh", cmd_with_args, NULL);

Как видишь, даже в сях приходится экранировать кавычки и конец сроки — это обычные правила того языка, на котором ты пишешь программу. Но при этом тебе не надо знать правила шелла, и, например, экранировать пробелы и апострофы. remote.sh сам выполнит эту задачу, и передаст все параметры ровно в том виде, в котором он их сам получил.

Все параметры из массива args будут переданы на удалённую машину как есть, с сохранением пробелов, кавычек, апострофов, концов строк и любой оргии в любой комбинации.

Говорят, можно дать человеку книгу, можно даже заставить её прочитать, но невозможно заставить её понять.

Так нет execve-like интерфейса у ssh-библиотек из-за дебильности протокола, услышь ты уже наконец.

Извини, но это не у ssh-библиотек дебильность.