История изменений
Исправление 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-библиотек дебильность.