Здесь вам нужно вернуть son ()
def parent(x="Hello"):
text = x
def son():
print(text)
return son # return son()
print(parent())
Здесь вы получите результат разницы, потому что ссылаетесь на akin ()
def parent(x="Hello"):
text = x
def son():
print(text)
return son
akin = parent()
akin() # print(akin) will get the same output of first program
Разница в том, что каждая функция имеет адрес памяти, если вы ссылаетесь на функцию без скобок (), вы получите адрес этой функции. Таким образом, в вашей первой программе вы возвращаете адрес памяти функции, чтобы вы могли получить доступ к содержимому с помощью parent () () или вернуть фактическое значение из функции вместо возврата адреса
Некоторые другие респонденты уже ответили, как настроить монтирование с помощью устройства обратной связи, но вы специально спросили о bind
крепления, которые немного отличаются. Если вы хотите использовать bind mount, вы просто указываете - bind
в команде mount. Например:
mount --bind /original/path /new/path
Это сделает расположение файловой системы доступным в / original / path
, а также , доступном через / new / path
. Обратите внимание, что это не будет после точек монтирования! Например, предположим, что у меня есть следующие точки монтирования:
/something
/something/underneath/that
Теперь предположим, что я сделал монтирование bind
для / что-то
:
mount --bind /something /new_something
Я буду иметь доступ к файлам, подобным / что-то / myfile
по пути / new_something / myfile
. Но я не смогу получить доступ к файлам, таким как / что-то / под / этим / другим файлом
, по пути / new_something / под / этим / другим файлом
. Вы должны установить отдельное монтирование bind
для каждой файловой системы; или если у вас относительно новое ядро, вы можете использовать rbind
монтирования, которые делают следуют точкам монтирования:
mount --rbind /something /new_something
Одно предупреждение о rbind
монтирует: они не делают обрабатывать случай, когда файловая система монтируется после установки rbind
. То есть, предположим, у меня есть монтирование, подобное этому:
/something
Затем я настраиваю свой rbind
, как указано выше, и , затем я монтирую / что-то / под /, что
: rbind
волшебным образом не сделает новое крепление видимым через местоположение rbind
. Также имейте в виду, что, по-видимому, из-за ошибки в ядре вы не можете размонтировать монтирование rbind
.
Кроме того, на случай, если вы имели в виду «Как настроить монтирование bind с помощью mount (2) системный вызов? ": вы должны указать флаг MS_BIND
(определенный в mount.h
) при вызове mount (2)
для обычного связывания
крепление. Для монтирования rbind
необходимо указать MS_BIND
и флаг недокументирования MS_REC
(определенный в linux / fs.h
). [129 Надеюсь, что это помогает,
Эрик Мелски
h ) при вызове mount (2)
для обычного bind
mount. Для монтирования rbind
необходимо указать MS_BIND
и флаг недокументирования MS_REC
(определенный в linux / fs.h
). [129 Надеюсь, что это помогает,
Эрик Мелски
h ) при вызове mount (2)
для обычного bind
mount. Для монтирования rbind
необходимо указать MS_BIND
и флаг недокументирования MS_REC
(определенный в linux / fs.h
). [129 Надеюсь, что это помогает,
Эрик Мелски
Похоже, что все ответы до сих пор касаются монтажа на петлевых устройствах, а не создания петли с использованием bind mounts .
Как вы, вероятно, обнаружили,
$ mkdir -p test/test
$ mount --bind test test/test
позволяет получить доступ только к test / test / test
, и больше ничего. Даже
$ mount --rbind test test/test
не работает, потому что рекурсивное связывание монтирования эффективно проходит через поиск существующих монтирований в источнике и связывание их в цели.
То, что вы просили, невозможно, поскольку монтирование связывания не пересекается точки крепления Если вы действительно хотите смоделировать цикл файловой системы, попробуйте использовать монтирование с псевдосвязыванием, например localfs . Я не пробовал себя, он может заблокироваться при попытке прочитать файловую систему, предоставленную им самим. Только что я попытался экспортировать дерево NFS с crossmnt
и смонтировать его под себя,
mount /path/to/device /path/to/mount/location -o loop
где / path / to / device - это путь к разделу, который вы хотите смонтировать, или путь к образ диска, а / path / to / mount / location - это путь к папке, в которую вы хотите смонтировать устройство / образ в
, вам также может потребоваться указать тип файловой системы, например, такой (в которой используется fat16 / fat32). ):
mount /path/to/device /path/to/mount/location -o loop -t vfat
Вы также можете создать его с нуля:
Сначала создайте файл изображения и инициализируйте его
dd if=/dev/zero of=/tmp/loop.img bs=1024k count=$IMG_SIZE
Затем сделайте его допустимым разделом, используя выбранный вами тип FS
mkfs.ext3 -F /tmp/loop.img
Смонтируйте новый образ
mkdir -p /mnt/image
mount /tmp/loop.img /mnt/image -o loop
Теперь вы можете создавать / копировать файлы и каталоги в новом образе.
Веселитесь,
Jeach!