Ssh

scp 的 zsh 完成在連接到遠端伺服器時完成本地使用者

  • August 3, 2020

可以說,我在目前目錄中有一個文件,test.txt我想將其傳輸scp到遠端伺服器。

當我使用完成時,即:

scp -rp test<TAB>

zsh 完成提供了以下功能,而不是為我完成其餘的文件名:

scp -rp test<TAB>
test.txt
testuser

testuser恰好是我係統上的本地使用者。當我連接到遠端伺服器時,為什麼 zsh 完成會完成本地使用者?

這似乎是一個無用和愚蠢的規則。

scp使用與 ssh 相同的完成文件/usr/share/zsh/functions/Completion/Unix/_ssh,並且sshcommand 具有相同的行為,儘管ssh它不那麼煩人,因為 ssh 不應該完成本地文件名。

如何修改完成規則scp,使其僅提供本地文件名,而不提供本地使用者?

賞金更新

接受的解決方案適用scp,但問題仍然存在ssh。當我想連接myserver.domain.org並使用完成時:

ssh m<TAB>

完成系統提供myserver.domain.org(這是需要的),但也提供本地使用者manmessagebus,這是愚蠢的。

如何更改完成系統,ssh/scp以便/etc/passwd我可以指定(硬編碼)我想要完成的使用者列表,而不是完成所有本地使用者?

所以,換句話說:我不想禁用使用者完成ssh,因為接受的答案對scp. 但我想提供我自己的將完成的使用者列表,而不是使用來自的所有本地使用者/etc/passwd

zstyle ':completion:*:scp:*' tag-order '! users'

這告訴完成系統,對於,除非找不到其他完成,否則scp不要嘗試完成。users(見http://zsh.sourceforge.net/Doc/Release/Completion-System.html#index-tag_002dorder_002c-completion-style


要指定使用時應完成的唯一使用者名列表ssh

zstyle ':completion:*:ssh:*' users alice bob carol

(見http://zsh.sourceforge.net/Doc/Release/Completion-System.html#index-users_002c-completion-style

引用自:https://unix.stackexchange.com/questions/593354