Giter VIP home page Giter VIP logo

Comments (4)

entropitor avatar entropitor commented on July 1, 2024 12

Yes, the problem has to do with how the shell works.

With your command, the shell will interpret this. One of the first things it does is do the interpolation

npx dotenv -- echo "$FOO"

$FOO is replaced by the env variable named FOO which is probably unset, so you get the empty string

npx dotenv -- echo ""

Now npx is run which runs dotenv -- echo "" which runs echo "" (where the last command has access to the env variable FOO=bar)

I think npx dotenv -- bash -c 'echo "$FOO"' should work as everything between ' is not interpreted so env variables are not replaced. Now dotenv-cli will run bash -c 'echo "$FOO"' with the env variable set which means bash will run echo "$FOO" in the right environment which should print correctly.

from dotenv-cli.

bertday avatar bertday commented on July 1, 2024

Extremely helpful — thank you for taking the time to explain @entropitor .

from dotenv-cli.

entropitor avatar entropitor commented on July 1, 2024

@rbrtmrtn No problem. I've been tripped up a lot by early shell interpolation / env variables from the wrong process. It's quite confusing sometimes 😅

from dotenv-cli.

mikeybinns avatar mikeybinns commented on July 1, 2024

Is there a way to make this work on multiple environments? Bash doesn't work on Windows.

Edit: A possible way this could work is with an interpolate flag and character substitution e.g.
dotenv -- command $SOME_VAR $SOME_VAR_2
would become
dotenv --interpolate SOME_VAR,SOME_VAR_2 -- command #1 #2
It would assign a number based on position in the command and then swap the #1 with the variable.
Note that the variables are deliberately not using the $ in the second command to prevent being swapped out.

You could also then swap the order of variables in the command, like so:
dotenv -- command $SOME_VAR_2 $SOME_VAR
would be
dotenv --interpolate SOME_VAR,SOME_VAR_2 -- command #2 #1

from dotenv-cli.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.