cron processing only half of script











up vote
0
down vote

favorite












script:



curl -s http://api.ipify.org > ~/ip.txt && [[ -s ~/ip.txt ]] && ip=$(cat ip.txt) && echo $ip > ~/newIP.txt || echo WAN IP is blank: curl, latency  or internet issue
# logger -s WAN IP is blank: curl, latency or internet issue


script run only up to:



curl -s http://api.ipify.org > ~/ip.txt && [[ -s ~/ip.txt ]] && ip=$(cat ip.txt)


the other part is ignored, BUT when I manually sh the script from terminal it execute properly.



Is there something I am doing wrong?










share|improve this question
























  • thanks Perl, that was the issue.
    – grimdex
    Dec 2 at 18:00















up vote
0
down vote

favorite












script:



curl -s http://api.ipify.org > ~/ip.txt && [[ -s ~/ip.txt ]] && ip=$(cat ip.txt) && echo $ip > ~/newIP.txt || echo WAN IP is blank: curl, latency  or internet issue
# logger -s WAN IP is blank: curl, latency or internet issue


script run only up to:



curl -s http://api.ipify.org > ~/ip.txt && [[ -s ~/ip.txt ]] && ip=$(cat ip.txt)


the other part is ignored, BUT when I manually sh the script from terminal it execute properly.



Is there something I am doing wrong?










share|improve this question
























  • thanks Perl, that was the issue.
    – grimdex
    Dec 2 at 18:00













up vote
0
down vote

favorite









up vote
0
down vote

favorite











script:



curl -s http://api.ipify.org > ~/ip.txt && [[ -s ~/ip.txt ]] && ip=$(cat ip.txt) && echo $ip > ~/newIP.txt || echo WAN IP is blank: curl, latency  or internet issue
# logger -s WAN IP is blank: curl, latency or internet issue


script run only up to:



curl -s http://api.ipify.org > ~/ip.txt && [[ -s ~/ip.txt ]] && ip=$(cat ip.txt)


the other part is ignored, BUT when I manually sh the script from terminal it execute properly.



Is there something I am doing wrong?










share|improve this question















script:



curl -s http://api.ipify.org > ~/ip.txt && [[ -s ~/ip.txt ]] && ip=$(cat ip.txt) && echo $ip > ~/newIP.txt || echo WAN IP is blank: curl, latency  or internet issue
# logger -s WAN IP is blank: curl, latency or internet issue


script run only up to:



curl -s http://api.ipify.org > ~/ip.txt && [[ -s ~/ip.txt ]] && ip=$(cat ip.txt)


the other part is ignored, BUT when I manually sh the script from terminal it execute properly.



Is there something I am doing wrong?







scripts cron curl






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 2 at 17:18









Doug Smythies

7,11631428




7,11631428










asked Dec 2 at 17:14









grimdex

265




265












  • thanks Perl, that was the issue.
    – grimdex
    Dec 2 at 18:00


















  • thanks Perl, that was the issue.
    – grimdex
    Dec 2 at 18:00
















thanks Perl, that was the issue.
– grimdex
Dec 2 at 18:00




thanks Perl, that was the issue.
– grimdex
Dec 2 at 18:00










1 Answer
1






active

oldest

votes

















up vote
0
down vote













It might be a matter of taste, but I personally consider
those u > v && w && x > y || z one-liners unreadable
and especially un-debugable. If they work, they are fine,
but else they are a PITA to my mind.



In your case the mistake was the ip=$(cat ip.txt) part
because cronjobs may or may not have the current working
directory set to $HOME. The preceeding … > ~/ip.txt
writes a file to your $HOME but the following cat ip.txt
tries to access the file ip.txt from wherever directory
cat was started in. The simple fix woul be to replace
cat ip.txt with cat ~/ip.txt.



Having said that, I suggest the following:



#!/usr/bin/env bash

if ip=$(curl -s -f http://api.ipify.org); then
echo "$ip" > ~/newIP.txt
else
echo "WAN IP is blank: curl, latency or internet issue"
fi


This relies on curl returning a bad exit value (!=0) if it
cannot access the give site. If that is not the case, change the
the code to:



ip=$(curl -s -f http://api.ipify.org);
if [ "$ip" ]; then






share|improve this answer























    Your Answer








    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "89"
    };
    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',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    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%2faskubuntu.com%2fquestions%2f1097949%2fcron-processing-only-half-of-script%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote













    It might be a matter of taste, but I personally consider
    those u > v && w && x > y || z one-liners unreadable
    and especially un-debugable. If they work, they are fine,
    but else they are a PITA to my mind.



    In your case the mistake was the ip=$(cat ip.txt) part
    because cronjobs may or may not have the current working
    directory set to $HOME. The preceeding … > ~/ip.txt
    writes a file to your $HOME but the following cat ip.txt
    tries to access the file ip.txt from wherever directory
    cat was started in. The simple fix woul be to replace
    cat ip.txt with cat ~/ip.txt.



    Having said that, I suggest the following:



    #!/usr/bin/env bash

    if ip=$(curl -s -f http://api.ipify.org); then
    echo "$ip" > ~/newIP.txt
    else
    echo "WAN IP is blank: curl, latency or internet issue"
    fi


    This relies on curl returning a bad exit value (!=0) if it
    cannot access the give site. If that is not the case, change the
    the code to:



    ip=$(curl -s -f http://api.ipify.org);
    if [ "$ip" ]; then






    share|improve this answer



























      up vote
      0
      down vote













      It might be a matter of taste, but I personally consider
      those u > v && w && x > y || z one-liners unreadable
      and especially un-debugable. If they work, they are fine,
      but else they are a PITA to my mind.



      In your case the mistake was the ip=$(cat ip.txt) part
      because cronjobs may or may not have the current working
      directory set to $HOME. The preceeding … > ~/ip.txt
      writes a file to your $HOME but the following cat ip.txt
      tries to access the file ip.txt from wherever directory
      cat was started in. The simple fix woul be to replace
      cat ip.txt with cat ~/ip.txt.



      Having said that, I suggest the following:



      #!/usr/bin/env bash

      if ip=$(curl -s -f http://api.ipify.org); then
      echo "$ip" > ~/newIP.txt
      else
      echo "WAN IP is blank: curl, latency or internet issue"
      fi


      This relies on curl returning a bad exit value (!=0) if it
      cannot access the give site. If that is not the case, change the
      the code to:



      ip=$(curl -s -f http://api.ipify.org);
      if [ "$ip" ]; then






      share|improve this answer

























        up vote
        0
        down vote










        up vote
        0
        down vote









        It might be a matter of taste, but I personally consider
        those u > v && w && x > y || z one-liners unreadable
        and especially un-debugable. If they work, they are fine,
        but else they are a PITA to my mind.



        In your case the mistake was the ip=$(cat ip.txt) part
        because cronjobs may or may not have the current working
        directory set to $HOME. The preceeding … > ~/ip.txt
        writes a file to your $HOME but the following cat ip.txt
        tries to access the file ip.txt from wherever directory
        cat was started in. The simple fix woul be to replace
        cat ip.txt with cat ~/ip.txt.



        Having said that, I suggest the following:



        #!/usr/bin/env bash

        if ip=$(curl -s -f http://api.ipify.org); then
        echo "$ip" > ~/newIP.txt
        else
        echo "WAN IP is blank: curl, latency or internet issue"
        fi


        This relies on curl returning a bad exit value (!=0) if it
        cannot access the give site. If that is not the case, change the
        the code to:



        ip=$(curl -s -f http://api.ipify.org);
        if [ "$ip" ]; then






        share|improve this answer














        It might be a matter of taste, but I personally consider
        those u > v && w && x > y || z one-liners unreadable
        and especially un-debugable. If they work, they are fine,
        but else they are a PITA to my mind.



        In your case the mistake was the ip=$(cat ip.txt) part
        because cronjobs may or may not have the current working
        directory set to $HOME. The preceeding … > ~/ip.txt
        writes a file to your $HOME but the following cat ip.txt
        tries to access the file ip.txt from wherever directory
        cat was started in. The simple fix woul be to replace
        cat ip.txt with cat ~/ip.txt.



        Having said that, I suggest the following:



        #!/usr/bin/env bash

        if ip=$(curl -s -f http://api.ipify.org); then
        echo "$ip" > ~/newIP.txt
        else
        echo "WAN IP is blank: curl, latency or internet issue"
        fi


        This relies on curl returning a bad exit value (!=0) if it
        cannot access the give site. If that is not the case, change the
        the code to:



        ip=$(curl -s -f http://api.ipify.org);
        if [ "$ip" ]; then







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Dec 2 at 19:00

























        answered Dec 2 at 18:27









        PerlDuck

        5,07911230




        5,07911230






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Ask Ubuntu!


            • 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.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • 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%2faskubuntu.com%2fquestions%2f1097949%2fcron-processing-only-half-of-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

            flock() on closed filehandle LOCK_FILE at /usr/bin/apt-mirror

            Mangá

            Eduardo VII do Reino Unido