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.
Gostou do conteúdo?