Getting exit code from curl in bash script












1















I want to take the output of simple.sh, a script from the internet and check its exit code.



#!/bin/bash
$(curl -s http://127.0.0.1:8000/simple.sh)
if [ -z "$?" ]; then
echo "Good"
exit 0
else
echo "Bad"
exit 1
fi


simple.sh:



#!/bin/bash
exit 0


The problem I am getting is:



./test.sh: line 2: #!/bin/bash: No such file or directory
Bad


Any help is much appreciated.
Thank you










share|improve this question

























  • Try adding the full path to curl, i.e. the output from type curl. Probably a path issue.

    – datUser
    3 hours ago











  • try eval "$(curl ...)"

    – Jonas
    2 hours ago
















1















I want to take the output of simple.sh, a script from the internet and check its exit code.



#!/bin/bash
$(curl -s http://127.0.0.1:8000/simple.sh)
if [ -z "$?" ]; then
echo "Good"
exit 0
else
echo "Bad"
exit 1
fi


simple.sh:



#!/bin/bash
exit 0


The problem I am getting is:



./test.sh: line 2: #!/bin/bash: No such file or directory
Bad


Any help is much appreciated.
Thank you










share|improve this question

























  • Try adding the full path to curl, i.e. the output from type curl. Probably a path issue.

    – datUser
    3 hours ago











  • try eval "$(curl ...)"

    – Jonas
    2 hours ago














1












1








1


1






I want to take the output of simple.sh, a script from the internet and check its exit code.



#!/bin/bash
$(curl -s http://127.0.0.1:8000/simple.sh)
if [ -z "$?" ]; then
echo "Good"
exit 0
else
echo "Bad"
exit 1
fi


simple.sh:



#!/bin/bash
exit 0


The problem I am getting is:



./test.sh: line 2: #!/bin/bash: No such file or directory
Bad


Any help is much appreciated.
Thank you










share|improve this question
















I want to take the output of simple.sh, a script from the internet and check its exit code.



#!/bin/bash
$(curl -s http://127.0.0.1:8000/simple.sh)
if [ -z "$?" ]; then
echo "Good"
exit 0
else
echo "Bad"
exit 1
fi


simple.sh:



#!/bin/bash
exit 0


The problem I am getting is:



./test.sh: line 2: #!/bin/bash: No such file or directory
Bad


Any help is much appreciated.
Thank you







bash shell-script curl






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 59 mins ago









Inian

5,0151429




5,0151429










asked 3 hours ago









RiceRice

17110




17110













  • Try adding the full path to curl, i.e. the output from type curl. Probably a path issue.

    – datUser
    3 hours ago











  • try eval "$(curl ...)"

    – Jonas
    2 hours ago



















  • Try adding the full path to curl, i.e. the output from type curl. Probably a path issue.

    – datUser
    3 hours ago











  • try eval "$(curl ...)"

    – Jonas
    2 hours ago

















Try adding the full path to curl, i.e. the output from type curl. Probably a path issue.

– datUser
3 hours ago





Try adding the full path to curl, i.e. the output from type curl. Probably a path issue.

– datUser
3 hours ago













try eval "$(curl ...)"

– Jonas
2 hours ago





try eval "$(curl ...)"

– Jonas
2 hours ago










2 Answers
2






active

oldest

votes


















0














Can't say it's elegant, but this is the way I would do it:
#!/bin/bash
curl -s http://127.0.0.1:8000/simple.sh | /bin/bash -s >/dev/null 2>&1
rc=$?
if [ -z "$rc" ]
then
echo "Good"
exit 0
else
echo "Bad"
exit 1
fi


Seems to me, the way you are doing it is similar to executing a here-file inside the $( ... ) construct. Never tried that, not sure bash works that way.



Letting curl echo the contents of the file and piping it to bash accounts for the text output of the curl command and allows bash to execute it.



I'll bet that, if you try this, you will get the same results:
$( cat /[path]/simple.sh ); echo $?






share|improve this answer































    0














    Your idea is right, but you seem to have defined a wrong conditional for checking the return code with [ -z "$?" ] which checks if the return code string is empty or not. Irrespective of the result of the curl output, your $? will carry a value which means, you'll never assert the if condition of your script. You probably need to check the return code that curl returns directly in your script



    $(curl -s http://127.0.0.1:8000/simple.sh)
    if [ "$?" -eq 0 ]; then


    which is same as saying



    if [ "$(curl -s http://127.0.0.1:8000/simple.sh)" -eq 0 ]; then


    or even more tersely written without the test operator to allow the return code to be directly used in the if condition



    if curl -s http://127.0.0.1:8000/simple.sh; then





    share|improve this answer























      Your Answer








      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "106"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: false,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: null,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f505984%2fgetting-exit-code-from-curl-in-bash-script%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      0














      Can't say it's elegant, but this is the way I would do it:
      #!/bin/bash
      curl -s http://127.0.0.1:8000/simple.sh | /bin/bash -s >/dev/null 2>&1
      rc=$?
      if [ -z "$rc" ]
      then
      echo "Good"
      exit 0
      else
      echo "Bad"
      exit 1
      fi


      Seems to me, the way you are doing it is similar to executing a here-file inside the $( ... ) construct. Never tried that, not sure bash works that way.



      Letting curl echo the contents of the file and piping it to bash accounts for the text output of the curl command and allows bash to execute it.



      I'll bet that, if you try this, you will get the same results:
      $( cat /[path]/simple.sh ); echo $?






      share|improve this answer




























        0














        Can't say it's elegant, but this is the way I would do it:
        #!/bin/bash
        curl -s http://127.0.0.1:8000/simple.sh | /bin/bash -s >/dev/null 2>&1
        rc=$?
        if [ -z "$rc" ]
        then
        echo "Good"
        exit 0
        else
        echo "Bad"
        exit 1
        fi


        Seems to me, the way you are doing it is similar to executing a here-file inside the $( ... ) construct. Never tried that, not sure bash works that way.



        Letting curl echo the contents of the file and piping it to bash accounts for the text output of the curl command and allows bash to execute it.



        I'll bet that, if you try this, you will get the same results:
        $( cat /[path]/simple.sh ); echo $?






        share|improve this answer


























          0












          0








          0







          Can't say it's elegant, but this is the way I would do it:
          #!/bin/bash
          curl -s http://127.0.0.1:8000/simple.sh | /bin/bash -s >/dev/null 2>&1
          rc=$?
          if [ -z "$rc" ]
          then
          echo "Good"
          exit 0
          else
          echo "Bad"
          exit 1
          fi


          Seems to me, the way you are doing it is similar to executing a here-file inside the $( ... ) construct. Never tried that, not sure bash works that way.



          Letting curl echo the contents of the file and piping it to bash accounts for the text output of the curl command and allows bash to execute it.



          I'll bet that, if you try this, you will get the same results:
          $( cat /[path]/simple.sh ); echo $?






          share|improve this answer













          Can't say it's elegant, but this is the way I would do it:
          #!/bin/bash
          curl -s http://127.0.0.1:8000/simple.sh | /bin/bash -s >/dev/null 2>&1
          rc=$?
          if [ -z "$rc" ]
          then
          echo "Good"
          exit 0
          else
          echo "Bad"
          exit 1
          fi


          Seems to me, the way you are doing it is similar to executing a here-file inside the $( ... ) construct. Never tried that, not sure bash works that way.



          Letting curl echo the contents of the file and piping it to bash accounts for the text output of the curl command and allows bash to execute it.



          I'll bet that, if you try this, you will get the same results:
          $( cat /[path]/simple.sh ); echo $?







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 2 hours ago









          Scottie HScottie H

          326




          326

























              0














              Your idea is right, but you seem to have defined a wrong conditional for checking the return code with [ -z "$?" ] which checks if the return code string is empty or not. Irrespective of the result of the curl output, your $? will carry a value which means, you'll never assert the if condition of your script. You probably need to check the return code that curl returns directly in your script



              $(curl -s http://127.0.0.1:8000/simple.sh)
              if [ "$?" -eq 0 ]; then


              which is same as saying



              if [ "$(curl -s http://127.0.0.1:8000/simple.sh)" -eq 0 ]; then


              or even more tersely written without the test operator to allow the return code to be directly used in the if condition



              if curl -s http://127.0.0.1:8000/simple.sh; then





              share|improve this answer




























                0














                Your idea is right, but you seem to have defined a wrong conditional for checking the return code with [ -z "$?" ] which checks if the return code string is empty or not. Irrespective of the result of the curl output, your $? will carry a value which means, you'll never assert the if condition of your script. You probably need to check the return code that curl returns directly in your script



                $(curl -s http://127.0.0.1:8000/simple.sh)
                if [ "$?" -eq 0 ]; then


                which is same as saying



                if [ "$(curl -s http://127.0.0.1:8000/simple.sh)" -eq 0 ]; then


                or even more tersely written without the test operator to allow the return code to be directly used in the if condition



                if curl -s http://127.0.0.1:8000/simple.sh; then





                share|improve this answer


























                  0












                  0








                  0







                  Your idea is right, but you seem to have defined a wrong conditional for checking the return code with [ -z "$?" ] which checks if the return code string is empty or not. Irrespective of the result of the curl output, your $? will carry a value which means, you'll never assert the if condition of your script. You probably need to check the return code that curl returns directly in your script



                  $(curl -s http://127.0.0.1:8000/simple.sh)
                  if [ "$?" -eq 0 ]; then


                  which is same as saying



                  if [ "$(curl -s http://127.0.0.1:8000/simple.sh)" -eq 0 ]; then


                  or even more tersely written without the test operator to allow the return code to be directly used in the if condition



                  if curl -s http://127.0.0.1:8000/simple.sh; then





                  share|improve this answer













                  Your idea is right, but you seem to have defined a wrong conditional for checking the return code with [ -z "$?" ] which checks if the return code string is empty or not. Irrespective of the result of the curl output, your $? will carry a value which means, you'll never assert the if condition of your script. You probably need to check the return code that curl returns directly in your script



                  $(curl -s http://127.0.0.1:8000/simple.sh)
                  if [ "$?" -eq 0 ]; then


                  which is same as saying



                  if [ "$(curl -s http://127.0.0.1:8000/simple.sh)" -eq 0 ]; then


                  or even more tersely written without the test operator to allow the return code to be directly used in the if condition



                  if curl -s http://127.0.0.1:8000/simple.sh; then






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 1 hour ago









                  InianInian

                  5,0151429




                  5,0151429






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Unix & Linux Stack Exchange!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f505984%2fgetting-exit-code-from-curl-in-bash-script%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      CARDNET

                      Boot-repair Failure: Unable to locate package grub-common:i386

                      濃尾地震