В качестве альтернативы можно использовать дополнительный сценарий -:
.#!/bin/sh
echo one.sh: pid is "$$"
../two.sh
echo done with "$0"
(команда .
точно такая же, как source
в bash
, но .
более переносима)
echo two.sh: pid is "$$"
Пробный запуск:
$./one.sh
one.sh: pid is 31290
two.sh: pid is 31290
done with./one.sh
Сценарий two.sh
будет запущен в той же среде оболочки, что и one.sh
, и оболочка не будет создавать новый процесс для его запуска. Он ведет себя очень похоже на вызов функции оболочки, во многих отношениях (, например, используйте return
, а не exit
, чтобы вернуть управление из two.sh
в one.sh
досрочно; exit
полностью выйдет из сеанса оболочки ).