LINUX.ORG.RU

bash. subshell. вопрос.


0

1

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

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

ID = 0

ID = 1

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

ID =

ID =

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

спасибо.

★★★

Последнее исправление: niXman (всего исправлений: 3)

<телепатия>
Судя по аватарке, выполнялось это всё в csh, потому и не взлетает.
</телепатия>

Cancellor ★★★★☆
()
Ответ на: комментарий от adriano32

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

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

niXman ★★★
() автор топика
Ответ на: комментарий от zolden

в $SHELL идёт путь до текущего шелла.

BASH_SUBSHELL - это нечто непонятное, и ID=0/1 не будет возвращаться из пути до шелла точно.

takino ★★★★★
()

УМВР

~ $ echo "ID = $BASH_SUBSHELL"
ID = 0
~ $ (echo "ID = $BASH_SUBSHELL")
ID = 1

app-shells/bash-4.1_p9  USE="net nls -afs -bashlogger -examples -mem-scramble -plugins -vanilla"

TheAnonymous ★★★★★
()

Зачем тебе bash? Тебе C-shell не роднее?

Gordy
()
Ответ на: комментарий от niXman

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

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

#!/bin/bash

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

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

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

спасибо.

niXman ★★★
() автор топика
Ответ на: комментарий от mky

выполняю это: echo $SHLVL && (echo $SHLVL)

выводится две единицы.

niXman ★★★
() автор топика
Ответ на: комментарий от mky

читаю это: 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 ★★★
() автор топика
Ответ на: комментарий от niXman

> не понял о чем вы.

Это был ответ вот на это сообщение:

В убунте, как и в дебианах, dash же?

shell-script ★★★★★
()
Ответ на: комментарий от niXman

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

#!/bin/bash

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

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

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.