Is it possible to return the result of javascript method while executing that in shell script?

Viewed 139

I am new to javascript. I have a js file something like below(test.js):

async function getData() {
   let a =100;
   // Some other function calls which modifies a
   // Some more console logs here.
   return a;
}
(async () => {
  console.log(await getData()); // When trying to return await getData() giving some error.
})();

I am executing the above script output = $(node test.js) in shell script and I need the value of a in the shell script but here I am getting all the console.log statements. Is it possible to get the value?

1 Answers

If you know that output will always have one line (by output I mean returned value from getData()), you can use $(node test.js | tail -n 1) to grab only one last line from node test.js. Otherwise you can do this little hacky workaround by replacing console.log function:

async function getData() {
   let a = 100;
   console.log("Some cosole log");
   console.log("Some other log");
   return a;
}
(async () => {
        console_log = console.log; // Save original function for later
        console.log = ()=>{}; // Replace original with "dummy" function
        console_log(await getData()); // Use saved original to log only what we want
})();

This will work unless some part of code use process.stdout.write to log/print data directly. To avoid this, we can again replace process.stdout.write with some dummy function but since this is likely to break some other things, I would avoid it.

Related