Использование фильтров ethtool для балансировки очередей NIC

Вы объединяете две разные вещи: среду выполнения и переменные среды .

Переменные среды - это строки формы name = value , которые используются как форма конфигурации для команд и процессов. Например, PATH - это список каталогов, разделенных двоеточиями, в которых ищутся исполняемые команды, когда предоставляется только имя файла команды; LANG и различные переменные, начинающиеся с LC_ , управляют локалью и так далее.

Среда выполнения включает в себя все функции оболочки, которые влияют на выполнение команд. Конечно, он включает в себя переменные среды, но также такие вещи, как рабочий каталог, маску создания файла ( umask ), функции оболочки и определенные псевдонимы и так далее.

В момент выполнения - в момент, когда оболочка начинает выполнение команды - среда выполнения почти одинакова во всех случаях, с exec или без него. С помощью exec срабатывает ловушка оболочки EXIT (поскольку оболочка по существу завершается, когда заменяется другим процессом). Команда exec -c очищает переменные среды.

Флаг -c в Bash exec очищает только переменные среды. Если вы запускаете

bash -c `exec env`

, вы запускаете новую оболочку Bash, которая затем заменяется командой env ; который, когда не указаны другие параметры, просто выводит все переменные среды.Однако, если вы добавите флаг -c к exec , то есть

bash -c `exec -c env`

он ничего не печатает, и это потому, что env запускается без переменных среды ( или, другими словами, пустое окружение).

(Если вы запустите в терминале только exec env , оболочка, работающая в терминале, будет заменена командой env , и когда она завершится, терминал закроется. Вероятно, это произойдет слишком быстро, чтобы вы могли это увидеть. Вот почему я явно запускаю его под Bash, так как в этом случае заменяется именно этот sub-Bash, а не оболочка, которую использует ваш терминал.)

У меня есть не видел параметр -c , используемый в реальных сценариях, поскольку обычно вместо него используется env -i . Например:

bash -c `exec env -i PATH=$PATH env`

С параметрами команда env используется для запуска команды с измененными переменными среды; параметр -i используется для запуска с нуля; т.е. очистить все существующие переменные среды. Поскольку оболочка анализирует всю команду (строку) перед ее выполнением, вы можете использовать env -i VAR = $ VAR OTHER = $ OTHER , чтобы сохранить определенные переменные среды, указав env чтобы определить их со старыми значениями, которые у них были, когда оболочка анализировала командную строку. В приведенном выше примере последний env просто распечатывает результирующие переменные среды, но это может быть любая другая команда.

2
15.10.2017, 19:02
0 ответов

Теги

Похожие вопросы