By Marcos Oliveira,

Execute Comandos do Shell em JavaScript com ShellJS

Introdução

ShellJS é uma implementação portable para Linux, OS X e Windows de comandos de Shell Unix da API Node.js. Você pode usá-lo para eliminar a dependência do Script Shell em Unix, mantendo seus comandos familiares e poderosos. Você também pode instalá-lo __globalment__e para que você possa executá-lo a partir de projetos externos!

O projeto é testado em projetos como

  • PDF.js - Leitor de PDF do Firefox
  • Firebug - Depurador do Firefox
  • JSHint & ESLint - Linters populares de JavaScript
  • Zepto - Biblioteca de JavaScript compatível com jQuery para navegadores modernos
  • Yeoman - Aplicativos da Web e ferramenta de desenvolvimento
  • Deployd.com - PaaS de código aberto para rápida geração de backend de API

E muitos mais.

Uso da linha de comando

Se você quiser apenas comandos UNIX, confira o novo projeto shelljs/shx, um utilitário para shelljs na linha de comando.

shx mkdir -p foo
shx touch foo/bar.txt
shx rm -rf foo

Instalação

Via npm

npm install [-g] shelljs

Exemplos

var shell = require('shelljs');
 
if (!shell.which('git')) {
  shell.echo('Desculpe, este script requer o git.');
  shell.exit(1);
}
 
// Copiar ou remover arquivos
shell.rm('-rf', 'out/Release');
shell.cp('-R', 'stuff/', 'out/Release');
 
// Substituir macros em cada arquivo .js 
shell.cd('lib');
shell.ls('*.js').forEach(function (file) {
  shell.sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
  shell.sed('-i', /^.*LINHA_PARA_REMOVER.*$/, '', file);
  shell.sed('-i', /.*TROCAR_LINHA_QUE_CONTENHA_ISSO.*\n/, shell.cat('macro.js'), file);
});
shell.cd('..');
 
// Executar ferramenta externa de forma síncrona 
if (shell.exec('git commit -am "Auto-commit"').code !== 0) {
  shell.echo('Error: Git commit failed');
  shell.exit(1);
}

Global vs Local

Já não recomenda-se usar uma importação global para ShellJS (ou seja, require(‘shelljs / global’)). Embora ainda seja suportado por conveniência, isso polui o namespace global e, portanto, só deve ser usado com cautela.

Em vez disso, recomenda-se uma importação local (padrão para pacotes npm)

var shell = require('shelljs');
shell.echo('hello world');

Comandos do Shell em JS

Todos os comandos são executados de forma síncrona, salvo indicação em contrário. Todos os comandos aceitam caracteres globbing do bash (*,?, etc.), compatíveis com o módulo node glob module.

Para comandos e recursos menos utilizados, consulte a wiki.

cat(file [, file …])

var str = cat('file*.txt');
var str = cat('file1', 'file2');
var str = cat(['file1', 'file2']);

cd([dir])

chmod([options,] octal_mode || octal_string, file)

chmod([options,] symbolic_mode, file)

Opções disponíveis:

  • -v: exibe um diagnóstico para cada arquivo processado
  • -c: como verboso mas relatório apenas quando uma alteração é feita
  • -R: alterar arquivos e diretórios recursivamente

echo([options,] string [, string …])

Opções disponíveis:

  • -e: Interpretar backslashes

exec(command [, options] [, callback])

find(path [, path …])

grep([options,] regex_filter, file [, file …])

sed([options,] search_regex, replacement, file [, file …])

Opções disponíveis:

  • -i: Substitua o conteúdo do ‘arquivo’ no local.

Exemplos:

sed('-i', 'VERSAO_DO_PROGRAMA', 'v0.1.3', 'source.js');
sed(/.*DELETE_ESSA_LINHA.*\n/, '', 'source.js');

Como o Unix sed, o ShellJS sed suporta regex

sed(/(\w+)\s(\w+)/, '$2, $1', 'file.txt');

E vários outros comandos!

Veja o endereço oficial do ShellJS

https://github.com/shelljs/shelljs

Faça nosso curso gratuito de Shell Script e adquira todo conteúdo nesse link

http://www.terminalroot.com.br/shell/

Deixe seu comentário!

Valeu!

Curso Extremamente Avançado em Shell Script Bash

Você irá descobrir técnicas avançadas de escrever em Shell Script. Como criar instaladores para distribuições Linux, Animações, Documentações, além de tudo sobre Processos em sistemas tipo UNIX, detalhes sobre Comandos Avançados e Muito Mais !