Antes de entrar em detalhes sobre como executar comandos via terminal, acredito que vale a pena lembrar um pouco de onde veio esse apelido para entendermos os termos atrelados a ele.
Antes dos PCs, nos anos 70, nas universidades, por exemplo, as pessoas tinham dispositivos físicos que pareciam PCs chamados terminais. Eles tinham uma tela e um teclado, mas se conectaram a um grande mainframe em uma sala de servidores em algum lugar.
Terminal como é usado hoje em dia é o diminutivo para emulador de terminal.
Antes dos computadores terem interfaces gráficas (GUI – Graphical User Interface), eles tinham interfaces baseadas em texto (CLI – Command Line Interface).
Quando as GUIs foram adicionadas e se tornaram o padrão, era necessário usar um aplicativo para executar linhas de comando, e esse aplicativo é chamado de emulador de terminal.
Exemplos de emuladores de terminal
- Windows Terminal, Cmder (Windows),
- iTerm, iTerm2 (MacOS),
- Terminal e GNOME Terminal (Linux).
- outros aqui
Quando uma CLI é usada
As CLIs são frequentemente usadas por programadores e administradores de sistemas, em ambientes científicos e de engenharia, e por usuários de PC tecnicamente avançados. As CLIs também são populares entre as pessoas com deficiência visual, pois os comandos e respostas podem ser exibidos usando telas Braille atualizáveis.
Executar comando usando STDIN
Todo CLI precisa receber por algum meio os parâmetros de entrada necessários para realizar a operação do comando.
O meio mais antigo e comum do usuário passar informações a um programa é via teclado. Por isto ele é considerado a entrada padrão, e é daí que vem o nome stdin (STandarD INput, ou Entrada Padrão).
Geralmente, o usuário passa as informações previamente, via argumentos ou flags, antes de executá-lo. Em outros, o usuário pode digitar as informações durante a execução.
Um prompt de comando (ou apenas um prompt) é uma sequência de (um ou mais) caracteres usados em uma interface da linha de comandos para indicar disponibilidade para aceitar comandos do usuário. Ele literalmente solicita que o usuário tome uma ação.
Um prompt, normalmente, termina com um dos caracteres $, : , > ou – e geralmente inclui outras informações, como o caminho do diretório de trabalho atual e o nome do host.
Comando com Option, Argument e Flag
Primeiramente, não há definições consistentes dos termos “option”, “argumento” e “flag”, e não há autoridade central no mundo do desenvolvimento de software que possa impor seu uso.
Por exemplo, os elementos colocados na linha de comando após um comando geralmente são chamados de “argumentos” para o comando, por analogia com argumentos para uma chamada de função. Isso provavelmente ocorre em parte porque são chamadas de “argumentos” no manual C.
Já, o termo “opção” é derivado de “opcional”, o que implica que esses elementos podem ser deixados de fora.
Uma “flag” é um tipo de “opção”, uma opção do tipo booleano e sempre é falso por padrão (por exemplo, –verbose, –quiet, –all, –long, etc).
Uma “opção” diz ao comando como agir (por exemplo, -a, -l, –verbose, –output, -name, -c, etc.), enquanto um “argumento” diz à função em que agir / de (por exemplo, *, arquivo1 , nome do host, banco de dados).
❗ Alguns exemplos de comandos com argumentos:
$ ls /home/name/code/repo
/home/name/code/repo é um argumento do comando ls
$ sudo -u username
-u = é uma opção, username é um argumento
$ chmod 664 my-dir
664 é uma opção, my-dir é um argumento
$ ls –all
-all é uma flag do comando ls
Em uma observação mais ampla, todo programador tem a opção de procurar uma maneira padrão de fazer e nomear coisas, ele até pode reinventar a roda sem muito custo extra, a nomeação nunca será consistente.
Agora, documentar uma ferramenta ajuda a deixar claro qual o novo significado que o usuário deve atribuir a essas palavras. Dando exemplos, esses nomes e significados podem permanecer se houver pessoas suficientes usando o produto.
Exemplo de execução de comando com Ritchie
O Ritchie, um dos novos produtos open source da Zup, é justamente um CLI.
Ou seja, se você acompanhou tudo até aqui, é uma ferramenta que funciona através de linha de comando via um terminal.
Contextualizando : o Ritchie é uma ferramenta colaborativa que permite criar, armazenar e compartilhar automações de forma segura. Ele foi planejado para funcionar com Windows, MacOS e Linux, executando automações escritas em qualquer linguagem de programação.
VIA PROMPT
A forma padrão de executar comando com Ritchie é via prompt.
O usuário apenas executa um comando, e precisa informar os parâmetros de entrada da operação antes de fato executar a operação desejada.
Esses parâmetros são informados manualmente, ou digitando algum texto, ou escolhendo um parâmetro dentro de uma lista de opções.
Também é possível executar comando via prompt usando a flag –docker.
Informando essa flag, o CLI entende que ele precisa executar um DockerFile antes da automação.
VIA –STDIN
O Ritchie permite usar a flag –stdin para executar os comandos de uma forma alternativa.
Nesse caso, o CLI interpreta que todos parâmetros de entrada devem ser informados na linha de comando executada inicialmente, pois não aparecerá o prompt para o usuário informar eles.
Isso é particularmente útil quando o usuário não estará presente para informar os parâmetros manualmente, no caso de processos de rotina automatizados por exemplo.
Nesse caso, o Ritchie respeita um formato diferente com a seguinte nomenclatura:
echo “{\”key\”:\”value\”}” | RIT (GROUP) VERB NOUN –stdin
A palavra echo permite a ferramenta entender que o próximo argumento deverá ser extraído.
Obs: No caso do Ritchie, esse argumento deve respeitar o formato JSON e conter o nome das variáveis configurados nos arquivos da automação.
O carácter “ | ” (pipe) permite ao CLI separar o argumento do comando a ser executado.
A flag –stdin permite ao CLI saber que ele tem que executar o comando seguindo um padrão diferente, extraindo o argumento enviado através do echo para obter os parâmetros de entrada necessários para executar a automação.
No exemplo acima, os dois parâmetros de entrada da automação se chamam respectivamente number_one e number_two.
Por isso, o JSON consta esses 2 campos e seus valores.
O JSON é encaminhado como uma String, e por essa razão é preciso usar o caractere “ \ “ (barra invertida) para os caracteres especiais contido no campo para não quebrar a formatação.
Como demonstrado na animação acima, é possível aplicar mais de uma flag quando executar um comando no Ritchie, usando o –stdin junto com o –docker.
Um CLI para todas as automações
Quer entender mais a fundo a ferramenta e suas possibilidades? Veja como o Ritchie pode te ajudar a ter mais autonomia no dia a dia!
Ainda ficou com alguma dúvida no assunto ou quer compartilhar sua experiência sobre comandos via terminal? Não deixe de escrever pra gente nos comentários!