Eu pip install -U
apelidei como pi
. Eu quero correr:
zargs ~/scripts/python/**/requirements.txt -- pi -r
Há alguma maneira de fazer isso?
Eu também tentei esta alternativa feia:
zargs ~/scripts/python/**/requirements.txt -- ${aliases[pi]} -r
Mas disse (eval):2: command not found: pip install -U
.
Eu imaginei que o zargs deveria ser capaz de fazer exatamente esse tipo de coisa, já que é um zsh embutido.
Os pseudônimos são
csh
as funções do pobre. Os aliases não são realmente comandos, são mais substituições de texto.alias
es têm seu uso em shells mais avançados que possuem funções, como ferramentas de hacking para casos em que as funções não podem ser usadas, como em coisas como:Ou
O que não funcionaria com funções. Mas aqui, não é um desses casos.
Não define um
pi
comando , define umpi
alias . Aqui, por acaso, na expansão, isso acaba se transformando no início de um comando simples, mas os alias não são expandidos em todos os casos em que se espera um comando. Em particular, eles não são expandidos dentro de funções comozargs
aqui (bem, eles são, mas no momento da definição da função , não da invocação, ou seja, nossosforever
oufail
aliases acima podem ser úteis). E eles são expandidos em alguns contextos onde não são apropriados (como empi() { ...; }
).Um alias global não é uma solução, aliases globais ainda não são comandos, eles ainda substituirão o texto, mas serão expandidos em ainda mais casos.
Após um
Agora, uma
pi
palavra é expandida onde quer que ocorra. Assim, por exemplo,echo pi
produziriapip install -U
.Aqui, se você quisesse definir um
pi
comando, você usaria uma função:Esse seria invocado por
zargs
.Com seu alias
pi
simples , você ainda pode fazer:Ou seja, invoque
$IFS
-splitting na definição do alias. Ou indo um pouco além:onde
z
faz a divisão levando em consideração as aspas (por exemploecho "foo bar"
, ser dividida emecho
e em"foo bar"
vez deecho
,"foo
ebar"
),e
para realizar expansões (comoecho $(uname)
expandida paraecho Linux
, por exemplo),Q
para remover as aspas, o que daria uma melhor aproximação em mais alguns casos .