if (stdout==“E”) always return false

I’m comparing the output of childprocess.exec to a string, but I must have overlooked something since I didn’t get the expected result.

function download_all(list, callback){
    var i=0, cmd="";

    function afterDownload(){...}

    while(i<list.length)
    {
        cmd="[ -f ./downloads/"+list[i]+" ] && echo "E" || echo""+list[i]+""";
        exec(cmd, function(error, stdout, stderr){
            if(stdout=="E")
            {
                console.log("Already Exist");
            }else{
                console.log("download "+LINK+""+stdout);
                download(LINK+stdout, afterDownload());
            }
        });
        i=i+1;
    }

Basically, I check if a file exist, look at the output of the command, and if it is not E (which sign the file exist), download it. The problem is, even when the file exist, the app try to download LINK+E, which doesn’t exist and of course fail.

I’ve tried with === instead of ==, and ” instead of ‘, but it didn’t changed anything.

Is there some character in stdout other than E?

Answer

NodeJS has the “fs” module which takes care of that for you. The documentation is at http://nodejs.org/api/fs.html

You can do this:

fs.exists(list[i], function (exists) {
  console.log("exists = ", exists);
});

Leave a Reply

Your email address will not be published. Required fields are marked *