Acredito que isso seja muito simples, mas ainda não descobri. Como é possível atribuir um valor à variável e copiar esse valor para a área de transferência de forma realmente concisa?
Ou seja, algo assim
zsh=$(which zsh) | pbcopy
O que tenho agora e o que funciona para mim, mas não é conciso o suficiente, é:
zsh=$(which zsh); echo $zsh | pbcopy
Você poderia fazer:
=cmd
é um operador de expansão de nome de arquivo , que se expande para o caminho do primeiro comando encontrado em$PATH
. Semelhante ao que owhich
builtin gera, exceto que ele se expande para caminhos de comando externos, mesmo que haja também um alias/function/builtin/keyword com o mesmo nome (é mais parecido comwhich -p
).${var::=value}
é um operador de expansão de parâmetro zsh semelhante ao de Bourne${var=value}
,${var:=value}
exceto que é definido$var
comovalue
incondicionalmente (se a variável está definida, vazia ou não).<<<
é o operador de redirecionamento here-string (outra extensão zsh, aquela copiada por muitos outros shell). Como o<<
aqui-doc de Bourne, é um operador de redirecionamento que redireciona para entrada em um arquivo temporário excluído. Aqui, o arquivo temporário é preenchido com a string a seguir mais um caractere de nova linha.Em,,
pbcopy<<<${var::=value}
o redirecionamento seria feito no processo filho que eventualmente executapbcopy
, então a atribuição seria perdida posteriormente.Então, aqui, em vez disso, redirecionamos um grupo de comandos (
{...}
) que é executado no processo shell atual para que a atribuição não seja perdida, e esse grupo de comandos é executadopbcopy
em um processo filho (que herda esse stdin).Para evitar a nova linha
<<<
adicionada no casopbcopy
(comoxclip
sem-r
) não removê-la, você pode usar:Embora isso não seja menor que:
De alguma forma, pensei que você poderia definir a variável usando o parâmetro expansion , depois produzi-la e canalizá-la:
mas isso está incorreto, a variável é definida em um subshell.
A variante do muru baseada em Como canalizar a saída do comando para dois comandos separados e armazenar saídas é mais curta que o comando existente e o comando incorreto acima:
e pode ser ainda mais reduzido usando multios :