LINUX.ORG.RU
 

bash. subshell. вопрос.


0

1

читаю некоторый ман. там такой код:

echo "ID = $BASH_SUBSHELL"
(echo "ID = $BASH_SUBSHELL")
где должен быть такой вывод:

>>-----Цитата---->>

ID = 0

ID = 1

<<-----Цитата----<<

у меня же, вывод такой:

>>-----Цитата---->>

ID =

ID =

<<-----Цитата----<<

т.е. ни нуля, ни единицы. что не так?

спасибо.


[#] Ответ на: комментарий от adriano32 10.10.2011 12:36:40  

как-то глупо все выглядит... дело в том, что я на выходных проверял это дело на домашней машине(ubuntu). после того как запостил, проверил на рабочей(тоже ubuntu) - и все работает. хз как такое объяснить %) вечером проверю еще раз на домашней.

всем спасибо.

* ()
[#] Ответ на: комментарий от niXman 10.10.2011 12:50:37  

проверил на домашней машине - все ок. хз как это можно объяснить... баг, что ли...

такой еще вопрос. есть скрипт с таким содержанием:

#!/bin/bash

echo "ID = $BASH_SUBSHELL"
($0)
[[/code]]
правильно ли я понимаю, что скрипт должен запускать сам себя, и при этом, с каждым таким запуском, ID должен инкрементироваться?

у меня получается так, что скрипт сам себя запускает. но ID всегда равен нулю.

что делаю не так?

спасибо.

* ()
[#] Ответ на: комментарий от mky 11.10.2011 1:02:48  

читаю это: http://tldp.org/LDP/abs/html/subshells.html говорится:

>>-----Цитата---->>

While the $BASH_SUBSHELL internal variable indicates the nesting level of a subshell, the $SHLVL variable shows no change within a subshell.

<<-----Цитата----<<

и пример:

>>-----Цитата---->>

echo " \$BASH_SUBSHELL outside subshell = $BASH_SUBSHELL" # 0 ( echo " \$BASH_SUBSHELL inside subshell = $BASH_SUBSHELL" ) # 1 ( ( echo " \$BASH_SUBSHELL inside nested subshell = $BASH_SUBSHELL" ) ) # 2 # ^ ^ *** nested *** ^ ^

<<-----Цитата----<<

т.е. BASH_SUBSHELL инкрементируется в каждом сабшеле.

т.е. в моем примере:

#!/bin/bash

echo "ID = $BASH_SUBSHELL"
($0)
[[/code]]
ID в каждом сабшеле так же должен инкрементироваться?

* ()
[#] Ответ на: комментарий от niXman 11.10.2011 5:37:10  
mky

Такой код пробовали?

#!/bin/bash

echo "ID = $BASH_SUBSHELL, LEVEL=$SHLVL"
( echo  "One More. ID = $BASH_SUBSHELL, LEVEL=$SHLVL";  $0)

Когда запускается исполняемый файл, который явялется bash скриптом, то, получается, что это уже не subshell, а новый shell.

***** ()