Вместо ( something )
, который запускает something
в подоболочке, используйте { something ; }
, который запускает something
в текущей оболочке
Вам нужны пробелы после {
, а также;
(или новая строка )перед }
.
Пример:
$ { echo "hello $BASHPID";sleep 5;echo "hello again $BASHPID" ; }
hello 3536
hello again 3536
Обратите внимание, однако, что если вы запускаете некоторые сложные команды (или конвейерные команды ), большую часть времени они все равно будут находиться в подоболочке.
И "портативный" способ получить pid вашей текущей оболочки $$
.
Поэтому я бы вместо этого написал ваш тест как:
{ echo "hello $$"; sleep 5 ; echo "hello again $$" ; }
(сон в любом случае здесь бесполезен)