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 shellsh
.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.