Qual è la magia che mi permette di completare i file remoti mentre tab digito un comando scp?


16

Presumibilmente questa è una funzione fornita da alcuni plugin che ho abilitato nella mia configurazione oh-my-zsh (uso zsh da molti anni ormai).

Ho notato da quando ho aggiunto la mia chiave pubblica al server (ora posso SSH sul server senza inserire una password), quando compongo un scpcomando nella mia shell sono effettivamente in grado di completare i percorsi dei file remoti!

per esempio

$ diff <(scp Remoteuser@remote.domain.net:/var/www/html/

Ho colpito scheda e funziona e basta! (quanto a ciò che sto cercando di realizzare con il comando stesso, lo useròscp "copia" su stdout e lo invierò come un file per diff. In questo modo posso vedere le esatte modifiche che distribuisco al server prima di in esecuzione rsync)

Sono curioso di sapere quali sono i pezzi che fanno funzionare così bene. È qualcosa incorporato in SCP che è stato integrato con z shell? O qualcos'altro?

Risposte:


16

Oooh, ho trovato una spiegazione .

Per citare la parte pertinente:

La shell zsh è dotata di (più di una) grande / e funzionalità / e, come ad esempio il completamento con tabulazione remota. Se ad esempio vuoi copiare un file su scp, premi semplicemente tab in qualsiasi parte del nome file sull'host remoto. zsh è in grado di stabilire una sessione ssh in background e recuperare le informazioni correlate per te, in modo che tu possa completare la scheda attraverso i file remoti.

Il post continua a mostrare alcune zstyledichiarazioni che raggiungono il completamento, ma suggerirei caldamente di usare un pacchetto zsh come il summenzionato oh-my-zsh per mantenere questa roba gestita dalla comunità OSS per te.

Qualcosa di apparentemente rilevante, come visto sul mio sistema nella mia dir .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)"}%%
[# ]*}//,/ })'

<...>

Sorprendente!! Questa funzione è esclusiva di zsh. È possibile in bash.
Shivams,

1
@shivams questo può essere rilevante per le tue esigenze bash. Sembra che configurare oh-my-zsh sia molto più semplice, inoltre zsh è davvero bello. Penso che se ti interessa davvero, però, non c'è molto che zsh possa fare che bash non può (e anche il contrario è certamente vero). È semplicemente una questione di quanto lavoro sei disposto a fare.
Steven Lu,

7
@shivams Per me è sempre stato appena lavorato in bash - un giorno ho semplicemente premuto "tab" istintivamente con un comando scp e sono rimasto piuttosto sorpreso nel vedere che si è completato automaticamente! Cercando su Google, sembra che sia necessario installare il pacchetto bash-completamento se non lo si possiede già. Questa domanda unix.se è rilevante.
Pont,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.