scp 的 zsh 完成在連接到遠端伺服器時完成本地使用者
可以說,我在目前目錄中有一個文件,
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
,並且ssh
command 具有相同的行為,儘管ssh
它不那麼煩人,因為 ssh 不應該完成本地文件名。如何修改完成規則
scp
,使其僅提供本地文件名,而不提供本地使用者?賞金更新
接受的解決方案適用
scp
,但問題仍然存在ssh
。當我想連接myserver.domain.org
並使用完成時:ssh m<TAB>
完成系統提供
myserver.domain.org
(這是需要的),但也提供本地使用者man
和messagebus
,這是愚蠢的。如何更改完成系統,
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)