Что за магия позволяет мне заполнять удаленные файлы табуляцией при вводе команды scp?

16

Предположительно, это функция, предоставляемая некоторым плагином, который я включил в настройке oh-my-zsh (я использую zsh уже много лет).

С тех пор, как я добавил свой открытый ключ к серверу (теперь я могу использовать SSH к серверу без ввода пароля), я заметил, что когда я сочиняю scpкоманду в своей оболочке, я на самом деле могу завершать пути к удаленным файлам!

например

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

Я нажал на вкладку, и это просто работает! (Что касается того, что я пытаюсь выполнить с помощью самой команды, я собираюсь использовать scpдля «копирования» на стандартный вывод и передать его в виде файла для сравнения. Таким образом, я могу видеть точные изменения, которые я развернул на сервере до работает rsync)

Мне интересно, что это за штука, которая так хорошо работает? Это что-то встроенное в scp, которое было интегрировано с оболочкой z? Или что-то другое?

Стивен Лу
источник

Ответы:

16

Ооо, я нашел объяснение .

Чтобы процитировать соответствующую часть:

Оболочка zsh поставляется с (более чем одной) замечательной функцией (-ями), такими как удаленное табулирование. Например, если вы хотите скопировать файл через scp, просто нажмите вкладку в любой части имени файла на удаленном хосте. zsh может установить ssh-сеанс в фоновом режиме и получить для вас соответствующую информацию, чтобы вы могли завершить через удаленные файлы.

Далее в этом посте будут показаны некоторые zstyleобъявления, которые достигают завершения, но я настоятельно рекомендую использовать пакет zsh, такой как вышеупомянутый oh-my-zsh, для того, чтобы это содержимое поддерживалось сообществом OSS для вас.

Что-то актуальное, как видно из моей системы в моем .oh-my-zsh dir:

$ 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)"}%%
[# ]*}//,/ })'

<...>
Стивен Лу
источник
Удивительный!! Является ли эта функция эксклюзивной для zsh. Это возможно в bash.
Шивамс
1
@shivams это может иметь отношение к вашим потребностям Bash. Похоже, что настройка oh-my-zsh намного проще, плюс zsh действительно хорош. Я думаю, что если вы действительно заботитесь об этом, zsh не так много может сделать, чего не может bash (и обратное тоже, безусловно, верно). Просто вопрос того, сколько работы вы готовы вложить в это.
Стивен Лу
7
@shivams Для меня это всегда только что работал в bash - я просто инстинктивно нажал «tab» однажды в команде scp и был очень удивлен, увидев, что она автоматически заполняется! Погуглив, похоже, что вам нужно установить пакет bash-complete, если у вас его еще нет. Этот unix.se вопрос актуален.
Пон