что такое 'ENV <команда>' выполнение?

Что относительно того, чтобы использовать awk с [ как разделитель записей и пространство как разделитель полей. Это дает нам легко данные, которые будут помещены в файл как $0 где он должен отложить удаленное продвижение [ и имя файла как $1. Мы затем только должны обработать особый случай 1-й записи, которая пуста. Это дает нам:

awk -v "RS=[" -F " " 'NF != 0 {print "[" $0 > $1}' entry.txt
40
13.04.2017, 15:36
2 ответа

Эта команда

env name=value name2=value2 program and args

выполняет команду program and args со средой, сформированной путем расширения текущей среды с помощью переменных среды и значений, определяемых name=value и name2=value2. Если Вы не включаете аргументов как name=value, затем текущая среда проведена неизмененная.

Ключевая вещь, которая происходит относительно псевдонимов, состоит в том, что ENV является внешней командой, таким образом, он не имеет никакого “знания” псевдонимов: псевдонимы являются конструкцией оболочки, которые не являются частью нормальной модели процесса и не оказывают влияния на программы, которые непосредственно запущены непрограммными оболочками (как ENV). ENV просто передает program and arguments к исполнительному вызову (как execvp, который будет искать ПУТЬ program).

В основном использование ENV как это является (главным образом) независимым от оболочки способом избежать, чтобы псевдонимы, функции оболочки, окружили встроенные команды и любые другие биты функциональности оболочки, которая могла бы заменить или переопределить позиционные командой аргументы (т.е. названия программы) — если, конечно, env псевдоним или функция оболочки! Если Вы волнуетесь по поводу env будучи псевдонимом, Вы могли обстоятельно объяснить полный путь (например. /usr/bin/env, хотя это может варьироваться).

40
27.01.2020, 19:35

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

Например, начиная сценарий Bash с #!/bin/bash хорошо, тогда как #!bash не, несмотря на /bin быть включенным в PATH в каждой разумной системе.

Я часто встречался с этим в программах Python, которые обычно начинаются #!/usr/bin/env python постараться не указывать весь, системно-зависимый путь python исполняемый файл (отмечают, однако, что он все еще требует этого env находится в /usr/bin, это однако намного более распространено, чем местоположение двоичного файла Python).

25
27.01.2020, 19:35

Теги

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