ShellJS: executando comandos Unix com Javascript e Node.js

NodeJS

Fala pessoal, nesse tutorial vou estar ensinando como executar comandos do terminal com Javascript e Node.js.

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 – Unix shell commands for Node.js

ShellJS é o nome da lib 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().

Exemplos de utilização:

Primeiramente, faça o require do módulo shelljs:

const shell = require('shelljs');

Executando um comando qualquer:

// 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:

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:

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');

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

Essas são apenas algumas das funções disponibilizadas pelo ShellJS. Você pode ver todas as funções disponíveis no site oficial do módulo http://documentup.com/shelljs/shelljs.

Até a próxima!