Как раскрыть переменные в строке? - PullRequest
1 голос
/ 27 января 2020

У меня есть два файла с именами proc и env.

В proc:

python -m SimpleHTTPServer $PORT

В env:

PORT=8080

Мне нужно повторить следующую строку (не exe c это), не зная PORT в файле

python -m SimpleHTTPServer 8080

  • export $(cat env) может помочь мне загрузить env.
  • eval $(cat proc) может помочь мне exe c это (что мне не нужно).
  • ${!var} может быть полезно расширить $PORT, но я не знаю как использовать его.

Ответы [ 3 ]

3 голосов
/ 27 января 2020

Вы можете получить файл env, export переменную PORT и использовать envsubst для замены переменной в proc. Это выполняется в подоболочке для поддержания чистоты среды.

(. ./env; export PORT; envsubst '$PORT' <proc)

Вывод:

python -m SimpleHTTPServer 8080
2 голосов
/ 27 января 2020

Если у вас нет envsubst, вы можете использовать эту маленькую однострочную строку, которая работает на любой оболочке POSIX.

$ . ./env; eval echo $(cat proc)
python -m SimpleHTTPServer 8080

Применяются все предупреждения о eval, т.е. вы должны сделать уверен, что proc безопасно оценить без нежелательных побочных эффектов. Ограничения: будет работать только с одной строкой proc и может изменить пробел между аргументами на один пробел.

1 голос
/ 27 января 2020

Вы можете использовать следующую команду:

export $(cat env) && eval echo $(cat proc)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...