Как я могу передать следующую команду с новыми переменными среды?
У меня есть сценарий оболочки, который объявляет некоторые переменные:
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