Потому что на данный момент это не переменная окружения, а локальная переменная оболочки. Чтобы это работало, вам нужно export MY_TEST
его. Альтернативой может быть это:
env MY_TEST=ret./test
(В Bash также просто MY_TEST=ret./test
, но сenv
более переносимы между оболочками.)
Вы могли бы, кстати, проверить и это, заменив свой ./test
на env|grep MY_TEST
.
В Bash (, но не во всех других оболочках ), вы также можете сказать
Выполнение его в командной строке будет -в этом случае -эквивалентно тому, что вы делаете в сценарии.
Используйте:
export MY_TEST=ret; env|grep MY_TEST
, чтобы проверить, что я написал.
Предполагая, что ./test
это сценарий оболочки (того же диалекта оболочки ), вы также можете использовать
source./test
... чтобы перенести все операторы из ./test
в вашу текущую оболочку. Переменная shell/local также будет видна, потому что на самом деле вы не запускаете другой процесс.
Подоболочка имеет собственные настройки (, например. параметры оболочки и рабочий каталог ), но технически выполняются в одном и том же процессе. Так что здесь нет fork()
. Если есть fork()
аргументы командной строки и переменные окружения, можно было бы передать материал другому сценарию/исполняемому файлу.
Это отличается от случая, когда подоболочка наследует оболочки/локальные переменные родительской оболочки:
TEST=ret; (echo "shell variable=$TEST"; env|grep TEST)
Здесь подоболочка (внутри(...)
)увидит переменную, но это все еще не переменная окружения.
Я предполагаю, что -netdev user
отлично работает с TCP и UDP, но не с ICMP. Попробуйте запустить tcpdump
на интерфейсе хост-компьютера (s ), чтобы проверить, правильно ли пересылаются и/или транслируются пакеты ICMP.
Я не знаю, как -netdev user
работает на хост-компьютере, но если вы хотите, чтобы ваша гостевая машина вела себя как настоящий член вашей сети, возможно, создайте интерфейс tap
на хост-компьютере, объединив его. с физическим интерфейсом хоста (оба требуют root
доступа ), и тогда использование -netdev tap
будет лучшей альтернативой.