Execute Comandos do Shell em JavaScript com ShellJS

ShellJS é uma implementação portable para Linux, OS X e Windows de comandos de Shell Unix da API Node.js.


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!


shellscript bash javascript unix


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!