Puncte:0

exportați noi parametrii de mediu fără a fi afișați pe terminal

drapel cn

Încerc să rulez un script și bash export scoate text atunci când nu vreau, deoarece întrerupe rezultatul. Trebuie să rulez un script care extrage unele informații și apoi le inserează în următorul mediu de comenzi, un fel de a obține secretele AWS pentru awscli și de a le transmite în mod transparent în mediul aws. Obțin rezultate inconsecvente și nu știu de ce

$ ./bin/aws-creds mock
AWS_ACCESS_KEY_ID=mock1234
AWS_SECRET_ACCESS_KEY=mock1234
AWS_CREDS=succes

$ ddt aws-creds mock
AWS_ACCESS_KEY_ID=mock1234
AWS_SECRET_ACCESS_KEY=mock1234
AWS_CREDS=succes

Ambele ies în mod egal, ceea ce este grozav, așa că să încercăm să le rulăm și să folosim exportul la ieșire

$ export $(./bin/aws-creds mock)
$ export $(ddt aws-creds mock)
AWS_ACCESS_KEY_ID=mock1234
AWS_SECRET_ACCESS_KEY=mock1234
AWS_CREDS=succes
declar -x .... o grămadă de lucruri în plus din mediul meu

Asteapta o secunda? Ambele comenzi, atunci când sunt puse în export folosind un subshell $(...) par să facă lucruri diferite și asta este ceea ce vreau să repar. Vreau ca primul script ./bin, fără ieșire, dar toți parametrii noi inserați în mediul shell-uri. Se pare că scriptul pe care l-am scris „ddt” nu funcționează la fel din anumite motive.

Poate cineva să explice de ce și poate sugera o modalitate de a o remedia?

drapel ph
`ddt` poate trimite ieșirea la stderr mai degrabă decât la stdout; consultați [„Ieșirea nu este capturată în variabila bash” pe Stackoverflow](https://stackoverflow.com/questions/37115949/output-not-captured-in-bash-variable). Atenție: folosirea stderr a unei comenzi ca argumente pentru „export” poate ajunge la încercarea de a exporta mesaje de eroare reale... ceea ce nu va avea deloc sens.
drapel cn
Ai perfectă dreptate Gordon, chiar nu am văzut acea greșeală, mulțumesc foarte mult că m-ai ajutat! Vă rugăm să puneți asta ca răspuns, ca să îl pot marca ca fiind cel potrivit! Comanda „ddt” a fost configurată greșit pentru a utiliza stderr din cauza unei greșeli de copiere/lipire, ieșirea în stdout a funcționat
Puncte:1
drapel ph

[Extins din comentarii:] The ddt comanda își trimitea ieșirea la eroare standard (stderr) mai degrabă decât la ieșirea standard (stdout) și $( ) captează doar stdout. Există practic două moduri de a remedia acest lucru:

  1. Opțiunea mai bună este să repari ddt deci trimite valorile variabilei la stdout mai degrabă decât la stderr.
  2. Dacă nu este posibil, puteți adăuga 2>&1 după ddt comanda, pentru a redirecționa stderr-ul său la stdout (și permite $( ) pentru a-l captura). Dar acest lucru riscă ca dacă ddt imprimă orice erori reale, va continua și va încerca export acele mesaje, cu rezultate imprevizibile (și probabil nedorite).

Vezi întrebarea „Ieșirea nu este capturată în variabila bash” pe Stackoverflow.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.