I’ve got this command in a bash script:

TEST=$(curl -o /dev/null -s -k -w "%{http_code}" -u "${USERNAME}:${PASSWORD}" "${URL}/dashboard/")
echo "${TEST}" #debug

When the script runs, the output is “000”.

When I run the same curl command from the shell, the output is “200” (which is correct, since the URL is valid).

I verified that the USERNAME, PASSWORD, and URL vars are being passed to the subshell.

I’d appreciate it if you could point out what I’m doing wrong here. :)

UPDATE: This has been solved.

  • GenderNeutralBro@lemmy.sdf.org
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    14 days ago

    I verified that the USERNAME, PASSWORD, and URL vars are being passed to the subshell.

    But are they being passed into the script? Normal behavior would be for variables to propagate to subshells but not to scripts/commands, unless you explicitly export them (e.g. export USERNAME='my_username' instead of just USERNAME='my_username'). Is that what’s happening here?

    Another possibility is that when the script runs, it is run with a different shell, like sh or zsh. Does your script have a #! line at the top, and is it pointing to the same version of bash you are running in Terminal?

    If you run echo $PATH; which curl in the script vs directly in your Terminal, do they output the same results? This is a bit of an edge case, but I’ve been stymied before by having multiple versions of curl installed (e.g. via homebrew and via my distro) and different PATHs in different contexts causing unexpected behavior.

    • Mike Wooskey@lemmy.thewooskeys.comOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      14 days ago

      Thanks for the suggestions.

      The script is pulling the values of USERNAME and PASSWORD from a .env. I added debug echo $USERNAME $PASSWORD in the script and it shows the correct values, so the script is pulling the values correctly and storing them in the vars correctly. I also added that echo to the subshell command, like:

      TEST=$(echo $USERNAME)
      echo $TEST
      

      …and the result was the correct USERNAME.

      The script does begin with #!/bin/bash.

      echo $PATH; which curl produces identical results when run from the shell and the script.