
Laboratório de pesquisa em segurança reproduzindo CVE-2026-41414 (pwn de pull_request_target em .github/workflows/pr.yml) — snapshot de skim-rs/skim @ ca986f4, não um fork.
Artefacto de investigação automatizada — não é o projeto original.
Este repositório é um laboratório descartável construído por um sistema automatizado para uma tese de mestrado na Université Laval sobre a reprodução de vulnerabilidades publicadas em workflows do GitHub Actions. É um instantâneo verbatim de
skim-rs/skimno commitca986f444c37d2c1dc15ce1fad2fe101776af8d9(2026-04-14), redistribuído sob a licença do próprio projeto, cujo ficheiro está incluído inalterado neste instantâneo.O projeto original não está envolvido, nunca é alvo, e a vulnerabilidade aqui estudada já é pública. Todos os segredos e variáveis neste repositório são valores fictícios gerados aleatoriamente — nenhuma credencial real está presente. As referências a Actions e imagens de runners estão fixadas no que resolveram em 2026-04-14; consulte
pinning.mdna saída do harness para todas as alterações feitas ao instantâneo.Perguntas ou objeções: [email protected]
A vida é curta, skim!
Passamos tanto do nosso tempo a navegar por ficheiros, linhas e comandos. É aí que o Skim entra! É um fuzzy finder poderoso concebido para tornar o seu fluxo de trabalho mais rápido e eficiente.
O Skim fornece um único executável chamado sk. Pense nele como uma alternativa mais inteligente a ferramentas como
grep — depois de experimentar, vai perguntar-se como alguma vez viveu sem ele!
O projeto skim contém vários componentes:
sk — o programa principalsk dentro do Vim/Nvim. Consulte skim.vim para suporte no Vim.| SO | Gestor de Pacotes | Comando |
|---|---|---|
| macOS | Homebrew | brew install sk |
| macOS | MacPorts | sudo port install skim |
| Alpine | apk | apk add skim |
| Arch | pacman | pacman -S skim |
| Fedora | COPR | ver abaixo |
| Gentoo | Portage | emerge --ask app-misc/skim |
| Guix | guix | guix install skim |
| Void | XBPS | xbps-install -S skim |
Pacotes Fedora atualizados são fornecidos através de um repositório COPR não oficial mantido pela comunidade.```bash sudo dnf copr enable sisyphus1813/skim sudo dnf install skim
## Manualmente
Qualquer uma das seguintes opções se aplica:
- Usando o script de instalação:
```sh
# Sempre verifique o conteúdo do script antes de executá-lo!
$ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/latest/download/skim-installer.sh | sh
```
- Usando o binário: Basta [baixar o executável sk](https://github.com/skim-rs/skim/releases) diretamente.
- Instalar a partir do [crates.io](https://crates.io/): `cargo install skim`
- Compilar manualmente:
```sh
$ git clone --depth 1 [email protected]:skim-rs/skim.git ~/.skim
$ cd ~/.skim
$ cargo build --release
$ # Adicione o executável `target/release/sk` resultante ao seu PATH
```
Você terá então acesso a:
- A página de manual, que você pode gravar no caminho correto ou executar `man --local-file <(sk --man)`
- As completions de shell (e keybinds opcionais), usando `source <(sk --shell \<shell> \[--shell-bindings])`, veja abaixo para detalhes
# Uso
O Skim pode ser usado tanto como um filtro geral (semelhante ao `grep`) quanto como uma
interface interativa para executar comandos.
## Como plugin do Vim (no neovim, confira [fzf-lua](https://github.com/ibhagwan/fzf-lua) com o perfil skim)
Via vim-plug (recomendado):
Instale o skim, depois:```vim
Plug 'skim-rs/skim'
Aqui estão alguns exemplos para você começar:```bash
sk
vim $(find . -name "*.rs" | sk -m)
Este último comando permite selecionar arquivos com a extensão ".rs" e abre
suas seleções no Vim - uma grande economia de tempo para desenvolvedores!
## Como Interface Interativa
O `skim` pode invocar outros comandos dinamicamente. Normalmente, você vai querer
integrá-lo com [grep](https://www.gnu.org/software/grep/),
[ack](https://github.com/petdance/ack2),
[ag](https://github.com/ggreer/the_silver_searcher), ou
[rg](https://github.com/BurntSushi/ripgrep) para pesquisar conteúdos em um
diretório de projeto:```sh
# works with grep
sk --ansi -i -c 'grep -rI --color=always --line-number {q} .'
# works with ack
sk --ansi -i -c 'ack --color {q}'
# works with ag
sk --ansi -i -c 'ag --color {q}'
# works with rg
sk --ansi -i -c 'rg --color=always --line-number {q}'
Nota: Nestes exemplos,
{q}será expandido literalmente para a consulta de entrada atual (entre aspas simples). Isso significa que estes exemplos pesquisarão a string de consulta exata, não de forma difusa. Para pesquisa difusa, canalize a saída do comando parasksem usar o modo interativo.

As integrações para Fish, Bash e Zsh estão disponíveis no diretório shell:
completion.{shell} contém os scripts de conclusão para o uso da CLI do skkey-bindings.{shell} contém os atalhos de teclado e as integrações de shell:
ctrl-t para selecionar um arquivo através do skctrl-r para selecionar uma entrada do histórico através do skalt-c para cd em um diretório selecionado através do skfish) ** para completar caminhos de arquivo, por exemplo, ls **<tab> mostrará um widget do sk para selecionar uma pastaPara ativar esses recursos, carregue o arquivo key-bindings.{shell} e configure as conclusões de acordo com a documentação do seu shell ou veja abaixo.
Você pode gerar conclusões de shell para o seu shell preferido usando a flag --shell com um dos shells suportados: bash, zsh, fish, powershell ou elvish:
source <(sk --shell bash)
source <(sk --shell zsh)
sk --shell fish | source
#### Opção 2: Guardar num ficheiro para ser carregado automaticamente no arranque do shell```sh
# For bash, add to ~/.bashrc
echo 'source <(sk --shell bash)' >> ~/.bashrc # Or save to ~/.bash_completion
# For zsh, add to ~/.zshrc
sk --shell zsh > ~/.zfunc/_sk # Create ~/.zfunc directory and add to fpath in ~/.zshrc
# For fish, add to ~/.config/fish/completions/
sk --shell fish > ~/.config/fish/completions/sk.fish
Alguns atalhos de teclado comumente usados:
| Tecla | Ação |
|---|---|
| Enter | Aceitar (selecionar o atual e sair) |
| ESC/Ctrl-G | Abortar |
| Ctrl-P/Seta para cima | Mover o cursor para cima |
| Ctrl-N/Seta para baixo | Mover o cursor para baixo |
| TAB | Alternar seleção e mover para baixo (com -m) |
| Shift-TAB | Alternar seleção e mover para cima (com -m) |
Para uma lista completa de atalhos de teclado, consulte a página de
man (man sk).
O skim empresta a sintaxe do fzf para correspondência de itens:
| Token | Tipo de correspondência | Descrição |
|---|---|---|
text | correspondência difusa | itens que correspondem a text |
^music | correspondência exata de prefixo | itens que começam com music |
.mp3$ | correspondência exata de sufixo | itens que terminam com .mp3 |
'wild | correspondência exata (entre aspas) | itens que incluem wild |
!fire | correspondência exata inversa | itens que não incluem fire |
!.mp3$ | correspondência exata de sufixo inversa | itens que não terminam com .mp3 |
O skim também suporta a combinação de tokens.
Espaço em branco tem o significado de AND. Com o termo src main, o skim buscará
itens que correspondam a ambos src e main.
| significa OR (observe os espaços ao redor de |). Com o termo .md$ | .markdown$, o skim buscará itens que terminem com .md ou
.markdown.
OR tem precedência maior. Por exemplo, readme .md$ | .markdown$ é interpretado como
readme AND (.md$ OR .markdown$).
Ao usar a opção --split-match, cada parte ao redor de espaços ou | será correspondida de forma dividida:
:) estiver ausente na consulta, faça uma correspondência normalrg para corresponder tanto no nome do arquivo quanto no conteúdo.Se você preferir usar expressões regulares, o skim oferece um modo regex:```sh
sk --regex
Pode alternar para o modo `regex` dinamicamente ao pressionar `Ctrl-R` (Modo Rotacionar).
## código de saída
| Código de Saída | Significado |
|-----------------|------------------------------------|
| 0 | Saiu normalmente |
| 1 | Nenhuma correspondência encontrada |
| 130 | Interrompido por Ctrl-C/Ctrl-G/ESC/etc... |
# Ferramentas compatíveis com `skim`
Estas ferramentas são ou pretendem ser compatíveis com `skim`:
## [plugin fzf-lua para neovim](https://github.com/ibhagwan/fzf-lua)
Um plugin para [neovim](https://neovim.io) que permite usar fzf e skim para navegar pelo seu código.
Instale-o com o seu gestor de pacotes, seguindo o README. Por exemplo, com `lazy.nvim`:```lua
{
"ibhagwan/fzf-lua",
-- enable `sk` support instead of the default `fzf`
opts = {'skim'}
}
Um plugin nushell para permitir uma melhor interação entre o skim e o nushell.
Seguindo as instruções no README do plugin, você pode instalá-lo com cargo:```nu cargo install nu_plugin_skim plugin add ~/.cargo/bin/nu_plugin_skim
## [extensão sqlite](https://github.com/tzachar/sqlite_skim)
Um módulo carregável do `sqlite` que habilita uma função `skim_score` em
consultas SQL.
# Personalização
A documentação aqui é apenas uma prévia; consulte a página de manual (`man sk`) para uma lista
completa de opções.
## Mapa de teclas
Especifique os atalhos com pares separados por vírgula (sem espaços permitidos). Por exemplo:```sh
sk --bind 'alt-a:select-all,alt-d:deselect-all'
Além disso, use + para concatenar ações, como execute-silent(echo {} | pbcopy)+abort.
Consulte a seção KEY BINDINGS da página de manual para obter detalhes.
Existem cinco chaves de ordenação para os resultados: score, index, begin, end, length. Você pode
especificar como os registros são ordenados por sk --tiebreak score,index,-begin ou qualquer
outra ordem que desejar.
Você provavelmente tem suas próprias preferências estéticas! Felizmente, você não está limitado à aparência padrão - o Skim suporta personalização abrangente do seu esquema de cores.```sh --color=[BASE_SCHEME][,COLOR:ANSI]
O Skim também respeita a variável de ambiente `NO_COLOR`. Defina-a com qualquer valor e o `sk` (e muitos outros aplicativos de terminal) desativará toda a saída colorida. Consulte [no-color.org](https://no-color.org/) para mais detalhes.
### Esquemas de Cores Base Disponíveis
O Skim vem com vários esquemas de cores integrados que você pode usar como ponto de partida:```sh
sk --color=dark # Default dark theme (256 colors)
sk --color=light # Light theme (256 colors)
sk --color=16 # Simple 16-color theme
sk --color=bw # Minimal black & white theme (no colors, just styles)
sk --color=none # Minimal black & white theme (no colors, no styles)
sk --color=molokai # Molokai-inspired theme (256 colors)
Você pode personalizar elementos individuais da interface especificando valores de cor após o esquema base:```sh sk --color=light,fg:232,bg:255,current_bg:116,info:27
As cores podem ser especificadas de várias formas:
- Cores ANSI (0-255): `sk --color=fg:232,bg:255`
- Valores hexadecimais RGB: `sk --color=fg:#FF0000` (texto vermelho)
### Opções de Personalização de Cores Disponíveis
Os seguintes elementos da interface podem ser personalizados:
| Elemento | Descrição | Exemplo |
|--------------------|---------------------------------------------|--------------------------------|
| `fg` | Cor de primeiro plano do texto normal | `--color=fg:232` |
| `bg` | Cor de fundo do texto normal | `--color=bg:255` |
| `matched` | Texto correspondente nos resultados da pesquisa | `--color=matched:108` |
| `matched_bg` | Fundo do texto correspondente | `--color=matched_bg:0` |
| `current` | Cor de primeiro plano da linha atual | `--color=current:254` |
| `current_bg` | Cor de fundo da linha atual | `--color=current_bg:236` |
| `current_match` | Texto correspondente na linha atual | `--color=current_match:151` |
| `current_match_bg` | Fundo do texto correspondente na linha atual | `--color=current_match_bg:236` |
| `spinner` | Cor do indicador de progresso | `--color=spinner:148` |
| `info` | Cor da linha de informações | `--color=info:144` |
| `prompt` | Cor do prompt | `--color=prompt:110` |
| `cursor` | Cor do cursor | `--color=cursor:161` |
| `selected` | Cor do marcador do item selecionado | `--color=selected:168` |
| `header` | Cor do texto do cabeçalho | `--color=header:109` |
| `border` | Cor da borda para pré-visualização/layout | `--color=border:59` |
### Exemplos```sh
# Use light theme but change the current line background
sk --color=light,current_bg:24
# Custom theme with multiple colors
sk --color=dark,matched:#00FF00,current:#FFFFFF,current_bg:#000080
# High contrast theme
sk --color=fg:232,bg:255,matched:160,current:255,current_bg:20
Para mais detalhes, consulte a página de manual (man sk).
--ansi: para analisar códigos de cores ANSI (por exemplo, \e[32mABC) da fonte de dados--regex: usar a consulta como expressão regular para corresponder à fonte de dadosNo modo interativo, você pode invocar um comando dinamicamente. Experimente:```sh sk --ansi -i -c 'rg --color=always --line-number {q}'
### Como funciona?

- O Skim aceita dois tipos de fontes: saída de comandos ou entrada via pipe
- O Skim tem dois tipos de prompts: um prompt de consulta para especificar o padrão de busca e um
prompt de comando para especificar os "argumentos" do comando
- `-c` é usado para especificar o comando a ser executado e tem como padrão `SKIM_DEFAULT_COMMAND`
- `-i` informa ao skim para abrir o prompt de comando na inicialização, que mostrará `c>` por padrão.
Para refinar ainda mais os resultados retornados pelo comando, pressione
`Ctrl-Q` para alternar o modo interativo.
## Executando programas externos
Você pode configurar atalhos de teclado para iniciar processos externos sem sair do Skim (`execute`, `execute-silent`).```sh
# Press F1 to open the file with less without leaving skim
# Press CTRL-Y to copy the line to clipboard and aborts skim (requires pbcopy)
sk --bind 'f1:execute(less -f {}),ctrl-y:execute-silent(echo {} | pbcopy)+abort'
O Skim oferece vários algoritmos, consulte a ajuda ou a página de manual para uma lista exaustiva. Entre eles estão:
skim_v2, o algoritmo padrão, vagamente baseado no algoritmo do fzffrizbee, usa frizbee, o algoritmo resistente a erros de digitação do plugin blink.cmp do neovim (apenas x86_64 e aarch64)fzy, baseado no algoritmo de fzy expandido para resistência básica a erros de digitaçãoarinae, o algoritmo mais recente do skim, projetado internamente com resistência a erros de digitação em mente, expandindo todos os acima para tornar a correspondência resistente a erros de digitação mais natural, mantendo o desempenho por item nos melhores padrõesEsta é uma ótima funcionalidade do fzf que o skim empresta. Por exemplo, usamos 'ag' para
encontrar as linhas correspondentes e, uma vez que reduzimos às linhas-alvo, queremos
finalmente decidir quais linhas escolher verificando o contexto ao redor da linha.
grep e ag têm a opção --context, e o skim pode fazer uso de --context para
uma melhor janela de pré-visualização. Por exemplo:```sh
sk --ansi -i -c 'ag --color {q}' --preview "preview.sh {}"
(Note que [preview.sh](https://github.com/junegunn/fzf.vim/blob/master/bin/preview.sh) é um script para imprimir o contexto dado filename:lines:columns)
Você obtém coisas assim:

### Como funciona?
Se o comando de preview for fornecido pela opção `--preview`, o skim substituirá
o `{}` pela linha atualmente destacada entre aspas simples, chamará o
comando para obter a saída e imprimirá a saída na janela de preview.
Às vezes você não precisa da linha inteira para invocar o comando. Nesse caso,
você pode usar `{}`, `{1..}`, `{..3}` ou `{1..5}` para selecionar os campos. A
sintaxe é explicada na seção [Suporte a campos](#filds-support).
Por fim, você pode querer configurar a posição da janela de preview com `--preview-window`:
- `--preview-window up:30%` para colocar a janela na posição superior com altura
30% da altura total do skim.
- `--preview-window left:10:wrap` para especificar que o `wrap` permite que a janela
de preview quebre a saída do comando de preview.
- `--preview-window wrap:hidden` para ocultar a janela de preview na inicialização; depois,
ela pode ser exibida pela ação `toggle-preview`.
## Suporte a campos
Normalmente, apenas usuários de plugins precisam entender isso.
Por exemplo, você tem a fonte de dados com o formato:```sh
<filename>:<line number>:<column number>
No entanto, você quer pesquisar <filename> apenas ao digitar consultas. Isso
significa que quando você digita 21, você quer encontrar um <filename> que contenha 21,
mas não corresponder ao número da linha ou ao número da coluna.
Você pode usar sk --delimiter ':' --nth 1 para conseguir isso.
Você também pode usar --with-nth para reorganizar a ordem dos campos.
Sintaxe de Intervalo
<num> -- para especificar o num-ésimo campo, começando em 1.start.. -- começando do start-ésimo campo e o restante...end -- começando do campo 0, até o campo end,
incluindo end.start..end -- começando do campo start, até o campo end,
incluindo end.O Skim pode ser usado como uma biblioteca em seus crates Rust.
Primeiro, adicione o skim ao seu Cargo.toml:```toml
[dependencies]
skim = { version = "", default-features = false, features = [..] }
_Nota sobre funcionalidades_:
- a funcionalidade `cli` é necessária para usar o skim como cli, ela *não* deve ser necessária ao usá-lo como biblioteca.
### Uso básico
Em seguida, tente executar este exemplo simples:```rust
extern crate skim;
use skim::prelude::*;
use std::io::Cursor;
pub fn main() {
let options = SkimOptionsBuilder::default()
.height("50%")
.multi(true)
.build()
.unwrap();
let input = "aaaaa\nbbbb\nccc".to_string();
// `SkimItemReader` is a helper to turn any `BufRead` into a stream of `SkimItem`
// `SkimItem` was implemented for `AsRef<str>` by default
let item_reader = SkimItemReader::default();
let items = item_reader.of_bufread(Cursor::new(input));
// `run_with` would read and show items from the stream
let selected_items = Skim::run_with(&options, Some(items))
.map(|out| out.selected_items)
.unwrap_or_else(|| Vec::new());
for item in selected_items.iter() {
println!("{}", item.output());
}
}
Também pode obter uma utilização detalhada do skim como biblioteca usando tokio e código assíncrono, permitindo interagir dinamicamente com
Dado um Option<SkimItemReceiver>, o skim irá ler os itens em conformidade, fazer o seu
trabalho e trazer-nos de volta a seleção do utilizador, incluindo os itens selecionados, a
consulta, etc. Note que:
SkimItemReceiver é crossbeam::channel::Receiver<Arc<dyn SkimItem>>none, irá invocar o comando fornecido e ler os itens a partir da saída do comandoO trait SkimItem é fornecido para personalizar a forma como uma linha pode ser apresentada,
comparada e pré-visualizada. É implementado por defeito para AsRef<str>
Além disso, SkimItemReader é um auxiliar para converter um BufRead em
SkimItemReceiver (podemos facilmente transformar um File ou String em BufRead),
para que possa lidar facilmente com strings ou ficheiros.
Consulte mais exemplos no diretório examples/.
Estes benchmarks executam a interface interativa numa sessão tmux e aguardam que a interface estabilize.

Pode gerar os gráficos usando just bench-plot ou executando a receita manualmente em GNU bash.
O Skim invoca find . para obter uma lista de ficheiros para filtragem. Pode substituir
isto definindo a variável de ambiente SKIM_DEFAULT_COMMAND. Por exemplo:```sh
$ SKIM_DEFAULT_COMMAND="fd --type f || git ls-tree -r --name-only HEAD || rg --files || find ."
$ sk
Podes colocá-lo no teu `.bashrc` ou `.zshrc` se quiseres que seja o padrão.
## Alguns ficheiros não são mostrados no plugin do Vim
Se usares o plugin do Vim e executares o comando `:SK`, podes descobrir que alguns
dos teus ficheiros não são mostrados.
Conforme descrito em [#3](https://github.com/skim-rs/skim/issues/3), no plugin
do Vim, `SKIM_DEFAULT_COMMAND` é definido para o comando por predefinição:```vim
let $SKIM_DEFAULT_COMMAND = "git ls-tree -r --name-only HEAD || rg --files || ag -l -g \"\" || find ."
Isto significa que os ficheiros não reconhecidos pelo git não serão apresentados. Pode substituir o
padrão com let $SKIM_DEFAULT_COMMAND = '' ou localizar os ficheiros em falta
por si próprio.
O fzf é um localizador difuso de linha de comandos escrito em Go e o skim tenta implementar um novo em Rust!
Este projeto foi escrito de raiz. Algumas decisões de implementação são diferentes das do fzf. Por exemplo:
skim tem um modo interativo.skim suporta pré-seleção.De um modo mais geral, os mantenedores do skim permitem-se alguma liberdade de implementação.
O objetivo é manter o skim tão completo em funcionalidades como o fzf é, mas os sinalizadores de comando podem diferir.
Crie novos issues se encontrar quaisquer bugs ou tiver quaisquer ideias. Pull requests são bem-vindos.
Um Vagrantfile está incluído para iniciar uma VM headless do Windows Server 2022 Core para testar
a compatibilidade com Windows sem necessidade de GUI. Requer VirtualBox
e Vagrant no seu host (o vagrant está incluído na shell de desenvolvimento
Nix via flake.nix).```sh
vagrant up # First boot: downloads the box and provisions (~15–20 min)
ssh -p 2222 vagrant@localhost # Password: vagrant
Dentro da VM, a raiz do projeto está montada em `C:\vagrant`:```powershell
cd C:\vagrant
cargo build
cargo test
Os arranques subsequentes são rápidos — o provisionamento é executado apenas uma vez:```sh vagrant halt # Stop the VM vagrant up # Resume vagrant destroy # Delete the VM entirely
# Resolução de Problemas
Para diagnosticar o que está acontecendo, você pode definir a variável de ambiente `SKIM_LOG` ou a flag `--log-level` para `debug` ou até mesmo `trace`, e definir a variável de ambiente `SKIM_LOG_FILE` ou a flag `--log-file` para um caminho. Você pode então ler esses logs durante ou após a execução para entender melhor o que está acontecendo. Não hesite em adicionar esses logs a uma issue se precisar de ajuda.
## Problemas de quebra de linha com nix, FreeBSD, termux
Se você encontrar problemas de exibição como:```bash
$ for n in {1..10}; do echo "$n"; done | sk
0/10 0/0.> 10/10 10 9 8 7 6 5 4 3 2> 1
Por exemplo
Você precisa definir TERMINFO ou TERMINFO_DIRS para o caminho de um banco de dados terminfo correto
Por exemplo, com o termux, você pode adicionar isto no seu bashrc:``` export TERMINFO=/data/data/com.termux/files/usr/share/terminfo
# Benchmarks
## Benchmark interativo (`cli`)
O benchmark `cli` avalia o skim (ou qualquer binário compatível) em comparação com outras versões ou com o fzf, executando a interface interativa dentro de uma sessão tmux e consultando a linha de status até que a contagem de correspondências se estabilize. Esta não é, de forma alguma, uma medição precisa ou infalível, mas tem o benefício adicional de comparar com o `fzf` e de fornecer métricas de recursos (pico de RSS e CPU).```sh
cargo bench --bench cli -- run # defaults: sk, 1 M items, query "test"
cargo bench --bench cli -- run sk -n 500000 -q foo # bare name resolved via $PATH
cargo bench --bench cli -- run ./old/sk ./new/sk -r 5 # compare two binaries, 5 runs each
cargo bench --bench cli -- run sk -f input.txt -q search # use an existing file
cargo bench --bench cli -- generate -f testdata.txt -n 2000000 # generate input file and exit
cargo bench --bench cli -- run sk --perf # record perf data (auto-named file)
cargo bench --bench cli -- run sk --strace # record strace data (auto-named file)
cargo bench --bench cli -- run sk -p perf.data # record perf data to perf.data
cargo bench --bench cli -- run sk -j # JSON output
cargo bench --bench cli -- run sk -r 3 -- --tiebreak=index # pass extra flags to sk
Os nomes dos binários são resolvidos para caminhos absolutos via which antes do uso, portanto nomes simples como sk ou fzf funcionam desde que estejam no $PATH.
Os benchmarks de critério estão disponíveis para medir o desempenho do skim com mais precisão.
Para executá-los, você precisa gerar os dados de entrada usando cargo bench --bench cli -- -g benches/fixtures/10M.txt -n 10000000 && cargo bench --bench cli -- -g benches/fixtures/1M.txt -n 1000000 e, em seguida, executar cargo bench -j 1.
Eles levarão vários minutos para serem concluídos.