bash/04/README.org

3.1 KiB

Shell Script na Prática

Desafio 4: Novo arquivo

Objetivos

  • Manipulação de argumentos
  • Separação de palavras em campos
  • Vetores associativos
  • Menu de seleção do Bash
  • Criação de menus customizados
  • Criação de menus com Fuzzy Finder
  • Estrutura de seleção
  • Execução de programas
  • Leitura e escrita em arquivos
  • Filtragem de texto

Enunciado

Criar um programa que crie um novo arquivo de um dado modelo e o abra no editor adequado. O programa será chamado de nf e a sintaxe de uso será:

nf NOVO_ARQUIVO[.EXT]
nf [OPÇÕES]

O programa será chamado de nf (de new file) e receberá as seguintes opções:

  • --list ou -l: Lista os modelos disponíveis e o editor associado.
  • --help ou -h: Exibe ajuda de uso.
  • --version ou -v: Exibe informações de versão e copyright.

Na ausência do nome do novo arquivo, a ajuda deverá ser impressa e o programa terminará com erro.

A associação de modelos e editores será feita com base na extensão do nome do arquivo a ser criado, por exemplo:

  • .asm: arquivo de um programa em Assembly (NASM)
  • .bash ou sem extensão: arquivo de script em Bash
  • .c: arquivo de um programa em C
  • .md: arquivo-texto formatado em GitHub Markdown
  • .org: arquivo-texto formatado em Org Mode (Emacs)
  • .s: arquivo de um programa para o GNU Assembler (GAS)
  • .sh: arquivo de script para o shell sh
  • .txt: arquivo-texto plano (raw text)

Os arquivos de modelo deverão ser criados no diretório: ~/.config/nf/modelos e seus nomes devem ser iguais às extensões a que estão associados.

Exemplo:

.config/
└─ nf/
   ├─ modelos/
   │   ├─ asm
   │   ├─ bash
   │   ├─ c
   │   ├─ md
   │   ├─ org
   │   ├─ s
   │   ├─ sh
   │   ├─ txt
   │   └─ ...
   └─ config

O arquivo ~/.config/nf/config deve conter a associação das extensões com os respectivos editores:

DEFAULT='emacs -nw'

editor[asm]=$DEFAULT
editor[bash]=$DEFAULT
editor[c]=geany
editor[md]=ghostwriter
editor[txt]=nano

O editor definido em DEFAULT será usado para qualquer extensão sem editor definido na configuração.

Evolução 1

Sem argumentos, o programa deve exibir um menu com os modelos disponíveis.

Exemplo:

NOVO ARQUIVO

[1] asm
[2] bash
[3] c
[4] md
[5] org
[6] s
[7] sh
[8] txt

Modelo (tecle <q> para sair):

Em seguida, deve ser apresentado um prompt para a digitação (obrigatória) do nome do arquivo:

Nome do arquivo:

Se o campo for deixado vazio, deve ser apresentada uma opção de tentar novamente:

Nome do arquivo:

O nome do arquivo é obrigatório!
Tecle <enter> para tentar novamente ou <c> para cancelar:

Evolução 2

Implementar uma opção de menu para criar um novo modelo usando o editor padrão para criar o arquivo de modelo e um prompt para a escolha do editor.

Evolução 3

Utilizar a ferramenta fzf para exibir o menu.