Подоболочки и PID: Почему $$ и \ $ \ $ иногда совпадают при вложенной sh -c? - PullRequest
2 голосов
/ 31 августа 2011

Я знаю, что это искусственно сложный пример, но почему оба PID одинаковы в первой строке, в то время как (как и ожидалось, по крайней мере для меня) две другие строки дают разные PID?

$ sh -c 'sh -c "echo $$ \$\$"'
4500 4500
$ sh -c 'sh -c "echo $$ \$\$"; true'
4596 5060
$ sh -c 'true; sh -c "echo $$ \$\$"'
4728 2868

Спасибо!

1 Ответ

1 голос
/ 31 августа 2011

Для меня в bash 4.1.5 вывод первой строки:

sh -c 'sh -c "echo $$ \$\$"'
4063 4064

как и ожидалось - значения разные.Также проверено на ash, sh и zsh.

Должна быть хитрая оптимизация.

Обновление:

в bash 3.2 есть и "ONESHOT »: см. Комментарий в shell.c: 1243 :

#if defined (ONESHOT)
/* Run one command, given as the argument to the -c option.  Tell
parse_and_execute not to fork for a simple command. */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...