это скрипт, который запускается под текущей оболочкой или дочерней оболочкой?

Я смущен в отношении следующего: если я выполняю сценарий или запускаю программу в текущей оболочке, набрав ее имя

  1. он ищет в переменной $ PATH, чтобы найти местоположение исполняемого файла
  2. как только он найдет это, выполнит ли исполняемый файл в текущей оболочке или вызовет дочернюю оболочку / процесс для запуска исполняемого файла?

Я полагаю, что для запуска исполняемого файла будет создан новый дочерний процесс, но, сказав это, как дочерний процесс знает (путь к исполняемому файлу) для запуска исполняемого файла? – если я изменил PATH в родительской оболочке, чтобы он мог найти исполняемый файл (используя только PATH = $ PATH: / newpath / to / executable), но не делая экспорт

eg, — I did not do an export here $ PATH=$PATH:/path/to/executable $ executable 

Когда родительская оболочка находит исполняемый файл, что он делает дальше (порождает дочерний процесс? Запускает исполняемый файл?). Но опять же, как дочерний процесс находит исполняемый файл, когда отредактированная среда PATH не экспортируется в него

2 Solutions collect form web for “это скрипт, который запускается под текущей оболочкой или дочерней оболочкой?”

Обычно родитель не ищет $PATH . Обычно это ядро.

Внутри, появление нового процесса – это fork (создает новый процесс, но продолжает работать с текущим кодом, родительский и дочерний каждый обычно переходит в свою собственную ветвь if ), за которой следует вызов exec * (заменяет текущий образ процесса новым процессом изображение) с дополнительными материалами (такими как перенаправление filedescriptor или настройки сигнала) между ними.

Члены exec * p семейства exec (семейство exec просто делает то же самое по-разному) заставляют ядро ​​искать $PATH среды $PATH при разрешении аргумента, в котором нет косой черты.

После того как путь будет разрешен, ядро ​​пытается запустить его как двоичный код, прибегая к линии shebang, если первая не работает, а исполняемый файл имеет строку shebang. Если используется строка shebang, интерпретатор, указанный в нем, запускается и передает разрешенный путь.

Существует разница между подоболочкой и дочерним процессом. То, о чем вы спрашиваете, – о подоболочке.

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

Когда родительская оболочка порождает дочерний процесс, доступ к переменным ограничен в дочернем процессе.

Вы можете проверить следующую команду.

unset a; а = 1
(echo "a – $ a в подоболочке")
sh -c 'echo "a – $ a в дочерней оболочке"

для получения дополнительной информации см. ссылку subshell info

  • Как навалом сжимать разные подпапки?
  • Началось с Ubuntu, apt-get upgrade, теперь у меня есть Trisquel?
  • Как использовать tmux при запуске как для OSX, так и для Ubuntu (включая Quake)
  • Загрузить большой файл в Sourceforge
  • Почему мне запрашивают пароль sudo, когда я указал «NOPASSWD» в файле / etc / sudoers?
  • Автоматическая установка Linux (Debian / Ubuntu)
  • Установка docker зависает при настройке докер-двигателя на ubuntu xenial
  • Низкая скорость PPPoE в Linux (Ubuntu)
  • Достижение полного разрешения с помощью PowerVR SGX454 на Ubuntu 12.04
  • Остановить процесс от запуска при запуске без его удаления
  • Удалите каталог изнутри с помощью интерфейса командной строки
  • Linux и Unix - лучшая ОС в мире.