[Comm] После обновления пропали иконки на рабочем столе

Dmitry Chistikov dd1email на gmail.com
Пт Авг 31 09:46:12 MSK 2012


Денис Смирнов, Aug. 30, 2012, 22:50 +0400:
> On Thu, Aug 30, 2012 at 09:30:45PM +0400, Dmitry Chistikov wrote:
> 
> DC> Строго говоря, запретить такое нельзя: пользователь может скормить
> DC> интерпретатору все, что захочет =)
> 
> Это самое 'что захочет' by default считается shell-скриптом (IMHO это одна
> из особенностей unix, которую лучше бы не поддерживать из совместимости, а
> удавить нафиг).

Но как, Холмс? Предложить оболочкам относиться к stdin с терминала
*совсем* не так, как к stdin из файла или канала (pipe)?

Или Вы про вот эту особенность:

If the header of a file isn't recognized (the attempted execve(2) failed with
the error ENOEXEC), these functions will execute the shell (/bin/sh) with the
path of the file as its first argument.  (If this attempt fails, no further
searching is done.)

(из exec(3);
"these functions" = execlp(), execvp(), execvpe(), но не execl() и не execle();
насколько я понимаю из exec(3), и не системный вызов execve(), хотя разъяснения
на самой странице execve(2), на мой взгляд, туманны; см. также письмо at@ рядом;
NB: системный вызов, правда, только один - execve(), остальные exec'и - функции
стандартной библиотеки)

Короче говоря, если файл не является "настоящим" бинарником (a.out
dynamically linked binary executable, dynamically linked ELF executable)
и не является сценарием оболочки (interpreter script в терминах execve(2);
грубо говоря, в первой строке должен быть корректная #!-строка),
то системный вызов для него оболочку запускать и не будет. Заниматься
этой самодеятельностью будут разве что функции стандартной библиотеки -
или же пользовательские программы (возможно, и сами оболочки).

-- 
Дмитрий Чистиков


Подробная информация о списке рассылки community