Рейтинг:0

экспортировать новые параметры env без вывода на терминал

флаг cn

Я пытаюсь запустить скрипт, и экспорт bash выводит текст, когда я этого не хочу, потому что он разбивает вывод. Мне нужно запустить скрипт, который извлекает некоторую информацию, а затем вставляет ее в следующую среду команд, что-то вроде получения секретов AWS для awscli и прозрачной передачи их в среду aws. Я получаю противоречивые результаты, и я не знаю, почему

$ ./bin/aws-creds имитация
AWS_ACCESS_KEY_ID=макет1234
AWS_SECRET_ACCESS_KEY=макет1234
AWS_CREDS=успех

$ ddt aws-creds mock
AWS_ACCESS_KEY_ID=макет1234
AWS_SECRET_ACCESS_KEY=макет1234
AWS_CREDS=успех

Оба выводят одинаково, и это здорово, поэтому давайте попробуем запустить их и использовать экспорт на выходе.

$ export $(./bin/aws-creds mock)
$ экспорт $ (макет ddt aws-creds)
AWS_ACCESS_KEY_ID=макет1234
AWS_SECRET_ACCESS_KEY=макет1234
AWS_CREDS=успех
объявлять -x .... куча лишних вещей из моего окружения

Подожди секунду? Обе команды при экспорте с использованием подоболочки $(...), кажется, делают разные вещи, и это то, что я хочу исправить. Я хочу, как первый скрипт ./bin, без вывода, но все новые параметры вставлены в среду оболочки. Кажется, что сценарий, который я написал «ddt», по какой-то причине не работает так же.

Может ли кто-нибудь объяснить, почему и, возможно, предложить какой-то способ исправить это?

флаг ph
`ddt` может отправлять свои выходные данные на стандартный вывод, а не на стандартный вывод; см. [«Вывод не захвачен в переменной bash» в Stackoverflow] (https://stackoverflow.com/questions/37115949/output-not-captured-in-bash-variable). Предупреждение: использование stderr команды в качестве аргументов для `export` может привести к попытке экспортировать фактические сообщения об ошибках... что не будет иметь никакого смысла.
флаг cn
Вы абсолютно правы, Гордон, я действительно не заметил этой ошибки, большое спасибо за помощь! Пожалуйста, укажите это как ответ, чтобы я мог отметить его как правильный! Команда «ddt» была неправильно настроена для использования stderr из-за ошибки копирования/вставки, вывод на стандартный вывод работал
Рейтинг:1
флаг ph

[Расширено из комментариев:] ддт команда отправляла свой вывод на стандартную ошибку (stderr), а не на стандартный вывод (stdout), и $( ) захватывает только стандартный вывод. Есть два основных способа исправить это:

  1. Лучший вариант - исправить ддт поэтому он отправляет значения переменных на стандартный вывод, а не на стандартный вывод.
  2. Если это невозможно, вы можете добавить 2>&1 после ддт команду, чтобы перенаправить ее stderr на stdout (и разрешить $( ) чтобы захватить его). Но при этом есть риск, что если ддт печатает любые фактические ошибки, он продолжит и попытается экспорт эти сообщения с непредсказуемыми (и, вероятно, нежелательными) результатами.

Смотрите вопрос «Вывод не захвачен в переменной bash» в Stackoverflow.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.