если 2 команды с такое же имя файла существует в переменной PATH, что будет выполнено? [дубликат]

Ваш цикл запускает один сеанс интерактивной оболочки на каждой итерации.

Интерактивный сеанс дает вам подсказку (поскольку он интерактивный). Выход из него возвращает управление циклу, который запускает другую интерактивную оболочку.

Вот почему вы не получаете огромное количество процессов bash одновременно, только два, родительский, который запускает цикл, и дочерний, который дает вам новое приглашение.


Цикл также может быть записан.

while true; do bash; done

Утилита true не принимает аргумент, она просто возвращает нулевое значение выхода, которое интерпретируется оболочкой как «истина».


Если вам нужен взрыв процессов bash (так называемая «форк-бомба»), вы можете написать

while true; do { bash & }; done

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

Возможно, вам придется перезагрузить систему, чтобы восстановиться.

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

0
08.01.2017, 07:31
1 ответ

что, если в 2 каталогах есть файлы для команды, какой из них будет выполнен?

Выигрывает первый, т.е. первый каталог в ПУТЬ , где находится нужный файл найдено, выполнено.

выполняет ли оболочка поиск в каталогах, указанных в переменной PATH рекурсивно или нет?

Нерекурсивно.

3
28.01.2020, 02:26

Теги

Похожие вопросы