Qual é a mágica que me permite separar arquivos remotos ao digitar um comando scp?

16

Presumivelmente, este é um recurso fornecido por algum plugin que eu habilitei em minha configuração do oh-my-zsh (eu tenho usado o zsh por muitos anos agora).

Eu notei desde que eu adicionei a minha chave pública ao servidor (agora eu posso SSH para o servidor sem digitar uma senha), quando eu componho um comando scp no meu shell eu sou realmente capaz de aba-arquivo remoto completo caminhos!

por exemplo,

$ diff <(scp [email protected]:/var/www/html/

Eu apertei o guia e ele simplesmente funciona! (quanto ao que eu estou tentando realizar com o comando em si, vou usar scp para "copiar" para stdout e alimentá-lo como um arquivo para diff. Dessa forma, posso ver as alterações exatas que implementei no servidor antes de executar rsync )

Estou curioso sobre quais são as peças que fazem isso funcionar tão bem. É algo embutido no scp que foi integrado ao shell z? Ou algo mais?

    
por Steven Lu 17.05.2015 / 17:58

1 resposta

16

Oooh, eu encontrei uma explicação .

Para citar a parte relevante:

The zsh shell comes with (more than one) great feature(s), such as remote tabcompletion. If you for example want to copy a file over scp, simply hit tab at any part of the filename on the remote host. zsh is able to establish an ssh session on the background, and fetch the related information for you, so you can tabcomplete trough the remote files.

O post continua mostrando algumas declarações de zstyle que alcançam a conclusão, mas eu sugiro strongmente usar um pacote zsh como o oh-my-zsh para obter este material mantido pela comunidade OSS para você.

Algo aparentemente relevante, como visto no meu sistema no meu diretório .oh-my-zsh:

$ ack scp 
plugins/common-aliases/common-aliases.plugin.zsh
85:zstyle -e ':completion:*:(ssh|scp|sftp|rsh|rsync):hosts' hosts 'reply=(${=${${(f)"$(cat {/etc/ssh_,~/.ssh/known_}hosts(|2)(N) /dev/null)"}%%
[# ]*}//,/ })'

<...>
    
por 17.05.2015 / 18:02