Armazenar e chamar comandos bash favoritos

3

Eu estou procurando por uma ferramenta de linha de comando do Linux que me permite armazenar o meu favorito / mais usado / mais difícil de lembrar Comandos bash e executá-los rapidamente quando necessário.

Eu prefiro não usar aliases porque quero evitar conflitos de nomes. alias é uma coisa útil, mas não é o que eu estou procurando, isso é algum biblioteca de trechos de linha de comando .

Um exemplo do que eu quero é:

$ favorite --add hello 'echo Hello World!'
$ favorite hello
Hello World!
$ favorite --delete hello
$ favorite hello
favorite: shortcut 'hello' not defined
$ _

Eu acho que sou capaz de codificar essa ferramenta sozinho (talvez usando python-cliapp ou php5-cli ), mas se algo já existe prefiro não reinventar a roda.

lorenzo-s
fonte
1
Os comandos que eu reutilizo geralmente precisam de alguma modificação antes da reexecução. O que eu faço é ter um arquivo de histórico grande (5000+ linhas) e pesquisa de regex com & lt; C-r & gt; para parciais.
Thor
2
Aprenda o CLI para trás e para frente. Depois disso, a única coisa que você precisa é da sua memória e da capacidade de digitar rapidamente. Acho muito mais fácil tentar lembrar a seleção padrão de comandos e, em seguida, tentar o nome do alias, scripts, outras muletas de memória. Além disso, posso ser útil em uma máquina sem nenhum alias ou assim por diante.
Zoredache
@Thor eu te devo uma cerveja por me fazer descobrir uma busca reversa de história inteligente.
lorenzo-s
1
@ lorenzo-s Se você está realmente certo em digitar "favorito" antes de cada trecho, por que você não apenas alias com um prefixo: alias fav-hello = 'echo Hello World!' ?
Soheil Hassas Yeganeh

Respostas:

3

Se você não se importa com a falta de mensagens de erro para erros de sintaxe, etc., você pode usar este script simples:

#!/bin/bash

case $1 in
  --add)
    if [ -a ~/.favorites/$2 ]; then
      echo favorite: Shortcut \'$2\' already exists.
    else
      echo $3 >> ~/.favorites/$2
    fi
  ;;
  --delete)
    if [ -a ~/.favorites/$2 ]; then
      rm ~/.favorites/$2
    else
      echo favorite: Shortcut \'$2\' does not exist.
    fi
  ;;
  *)
    if [ -a ~/.favorites/$1 ]; then
      $(cat ~/.favorites/$1)
    else
      echo favorite: Shortcut \'$1\' does not exist.
    fi
esac
Dennis
fonte
Eu acho que o seu uso de $3 é problemático. Eu acho que você quer mudar os dois primeiros parâmetros posicionais e usar $* em vez de.
Fran
Como o OP cita o comando ( favorite --add hello 'echo Hello World!' ) $3 torna-se echo Hello World!.
Dennis
Verdade, mas sem as aspas digitadas pelo usuário, ele funciona mal. Mas como o autor é o usuário, provavelmente está tudo bem.
Fran
Eu gosto da simplicidade :) +1
lorenzo-s
8

Parece que escrever scripts e colocá-los em ~/bin (que então estaria em seu PATH ) é uma alternativa aceitável. Isso funcionaria a menos que você queira ver e editar o comando antes de pressionar ENTRAR para executá-lo, mas o seu exemplo acima não demonstra esse requisito.

Fran
fonte