Как я могу передать следующую команду с новыми переменными среды?

У меня есть сценарий оболочки, который объявляет некоторые переменные:

export X=1
export Y=2

и я хотел бы иметь возможность сделать что-то вроде этого:

. ./path/to/script | command_that_has_access_to_X_and_Y

По сути, создайте сценарий как-нибудь, чтобы команда, следующая за каналом, могла получить доступ к этим переменным. Это возможно?

РЕДАКТИРОВАТЬ: одна из команд, которые я хотел бы запустить, это pg_dump, и учетные данные находятся в файле оболочки:

В основном я пытаюсь запустить это:

bash -c "pg_dump \$PRODUCTION_DB --password \$PRODUCTION_PASSWORD --user \$PRODUCTION_USERNAME --host \$PRODUCTION_HOST > #{backup_name}.sql"

2 ответа

Решение

Там нет необходимости использовать трубу. Если у вас есть export Команды в первом скрипте, эти переменные будут доступны для второго скрипта.

. ./path/to/script
command_that_has_access_to_X_and_Y

Конвейер - это просто инструмент для подключения стандартного ввода одного скрипта к стандартному выводу другого. Это эффективная альтернатива использованию временного файла; x | y более или менее так же, как

x > tmp.txt
y < tmp.txt

кроме операционных систем обрабатывает детали передачи текста из x в y так что оба могут работать одновременно, с y получать входные данные как x производит это.

Вы можете отправить по эхо вместо:

Сценарий слева:

#!/bin/bash
X='Something X'
Y='Something Y'
echo "$X"
echo "$Y"

Команда справа:

... | bash -c "read -r X; read -r Y; echo \"\$X : \$Y\""

Производит:

Something X : Something Y
Другие вопросы по тегам