Execute comandos no sistema com Javascript (Nodejs)

📆
Execute comandos no sistema com Javascript (Nodejs)

Opa, tudo bem? Executar comandos shell no sistema operacional utilizando Javascript pode parecer algo impossível, mas na verdade é bem simples. Nesse artigo eu vou te mostrar como executar comandos no sistema com Javascript e Node.js usando o ShellJS. 🚀

Recentemente estava trabalhando em um projeto onde eu precisava obter algumas informações à respeito do servidor que estava rodando algumas APIs em node.js, como quantidade de RAM usada, carga média e uso de cada core do processador, pesquisando encontrei uma lib para node.js, onde é possível executar comandos na máquina e obter o resultado utilizando apenas Javascript.

ShellJS, o que é e como funciona?

ShellJS é uma bliblioteca javascript que lhe permite executar comandos Unix na sua aplicação Node.js.

O uso dessa lib é bem simples, pois ela possui inúmeras funções que representam comandos e você pode digitar qualquer comando utilizando a função exec().

Como usar o ShellJS

Para iniciar o uso do ShellJS, você deve instalar o módulo no seu projeto usando o NPM ou Yarn:

npm install shelljs
yarn add shelljs

Após a instalação, você deve importar o módulo no seu arquivo javascript:

const shell = require('shelljs')

Agora você pode executar qualquer comando do sistema operacional utilizando a função exec():

// whoami: retorna o usuário atual
shell.exec('whoami') // rafael

Checando se o Git está instalado:

if (!shell.which('git')) {
  shell.echo('Desculpe, esse script requer que você possua o Git instalado,')
}

Copiando um arquivo de um local para outro:

shell.cp('/home/user/arquivo-origem.txt', '/home/user/pasta-qualquer/arquivo-destino.txt')

Copiando uma pasta e todos os seus arquivos:

shell.cp('-R', '/home/user/pasta-origem/*', '/home/user/pasta-destino')

Obtendo o diretório atual:

console.log(shell.pwd().stdout)

Criando um arquivo vazio:

shell.touch('nome-do-arquivo.txt')

Criando um arquivo de texto com conteúdo:

const text = 'Hello ShellJS!'
shell.echo(text).to('nome-do-arquivo.txt') // Hello ShellJS!

Adicionando um conteúdo no fim de um arquivo já existente:

// Cria um arquivo com um texto inicial
shell.echo('Rafael Laurindo!').to('file.txt') // Rafael Laurindo!

// Adiciona o conteúdo no fim arquivo
const content = 'https://rafaellaurindo.com.br'
shell.echo(content).toEnd('file.txt')
// Rafael Laurindo!
// https://rafaellaurindo.com.br

Checando a existência de um determinado arquivo:

if (shell.test('-f', '/caminho/ate/o/arquivo.txt')) {
  console.log('Arquivo encontrado!')
} else {
  console.log('Arquivo não encontrado!')
}

Checando a existência de uma determinada pasta:

if (shell.test('-d', '/caminho/ate/a/pasta')) {
  console.log('Pasta encontrada!')
} else {
  console.log('Pasta não encontrada!')
}

Você também pode executar essas funções sem precisar repetir sempre o prefixo shell.nomeDaFuncao().

Para utilizar dessa seguinte forma, você deve adicionar todas as funções do módulo ShellJS de forma global.

Segue o código de como utilizar as funções de forma global:

const shell = require('shelljs/global')

// Ex1: Criando um arquivo
touch('nome-do-arquivo.txt')

// Ex2: Listando os arquivos de uma pasta
ls('/home/user/pasta-qualquer')

Essas são apenas algumas das funções disponibilizadas pelo ShellJS. Porém, você pode conhecer todas as funções disponíveis no site oficial do módulo https://documentup.com/shelljs/shelljs.

Conclusão

Espero que esse tutorial tenha ajudado você a executar comandos no sistema com Javascript e Node.js usando o ShellJS.