Modifique o comando shell antes de executá-lo

1

Existem alguns comandos que obtêm subcomandos (por exemplo, git ou task do taskwarrior). Às vezes, tenho uma janela de terminal dedicada inteiramente a executar esse comando com vários subcomandos. O que eu desejo é que eu nem sempre precise digitar o comando principal. Deixe-me explicar isso com um exemplo do taskwarrior (um "gerenciador de lista de tarefas"):

$ task add proj:job +hard Refactor the API -- Add task to project 'job' tagged 'hard'
$ task proj:job +easy add prio:H Fix typo in README -- Tag is 'easy', priority 'high'
$ task proj:job next -- List tasks in project 'job', ordered by 'urgency'

Como você pode ver, task é bastante flexível em que o subcomando (por exemplo, add ou next ) pode ser colocado. Agora, se estou trabalhando em um determinado projeto (digamos, 'trabalho'), então eu gostaria de detalhar. Algo como:

$ CONTEXT="task proj:job"
[task proj:job] $ add +hard Refactor the API
[task proj:job] $ +easy add prio:H Fix typo in README
[task proj:job] $ next

O título desta pergunta é muito amplo (sugerindo que você queira executar um script sed sobre seu comando antes de executá-lo). No entanto, ficaria muito feliz com um dos seguintes procedimentos:

  1. Eu posso definir alguma variável (como CONTEXT no exemplo) cujo valor é prefixado em todos os comandos, antes de executá-lo.
  2. Como alternativa, e melhor ainda, o valor de CONTEXT poderia ser preenchido na linha de comando antes de começar a digitar meus comandos. Dessa forma, ocasionalmente eu posso retroceder ou Ctrl-U se eu quiser executar um comando fora do meu contexto.

Q. Is there a shell (preferably bash-like, for example zsh) that has the described feature?

    
por jmc 23.04.2018 / 06:44

1 resposta

1

Dirigindo-se ao seu fluxo de trabalho em vez da pergunta precisa feita, eu usaria uma função para esse tipo de situação:

t() { task proj:job "$@"; }

t add +hard Refactor the API
t +easy add prio:H Fix typo in README
t next

A vantagem de uma função sobre um alias é que o espaço reservado pode ser colocado em qualquer lugar no modelo de comando e não apenas no final da linha.

Do seu comando sobre querer evitar a sobrecarga do líder t , suponho que você poderia tentar algo assim:

add() { task proj:job add "$@"; }
next() { task proj:job next; }

add +hard Refactor the API
add +easy prio:H Fix typo in README
next
    
por 23.04.2018 / 09:24