Существует как минимум 3 возможных способа вызова скрипта bash:

:~$./myscript
:~$bash ./myscript
:~$bash -c "./myscript"

Один из них сказал, что в случае вызова № 3 (опция -c ) в иерархии есть еще один процесс bash. Я подготовил простой тестовый скрипт:

echo "SHLVL: $SHLVL"  
ps aux | grep bash

Переменная SHLVL действительно больше на единицу в случае # 3, но ps не выводит никакого дополнительного процесса bash в случае # 3. Единственный процесс bash, связанный со сценарием

bin/bash ./testscript

Так где же этот дополнительный процесс bash?

1 ответ1

1

На самом деле, похоже, что в bash есть оптимизация.

Давайте сделаем скрипт sleep20s :

#! /bin/bash
sleep 20

Чтобы избежать неясностей, давайте запустим оболочку ksh.

С помощью этой команды: bash -c "./sleep20s" вы получите:

ksh
  sleep20s
    sleep

Упс, где Баш? Но знайте, что если мы делаем что-то, что требует интерпретатора bash, например, дважды вызываем одну и ту же команду: bash -c "./sleep20s;./sleep20s" , то вы получите:

ksh
  bash
    sleep20s
      sleep

И Баш вернулся. Так что bash может быть умным и использовать exec для запуска дочернего скрипта в тривиальных случаях.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .