現在のディレクトリにファイルがあり、それをリモートサーバーに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
の動作は同じですが、ssh
この場合、sshはローカルファイル名を完成してはいけないので、あまり迷惑ではありません。
scp
ローカルユーザーではなくローカルファイル名のみを提供するように完了ルールを変更するにはどうすればよいですか?
賞金の更新
許可されたソリューションは機能しますscp
が、問題はまだ存在しますssh
。以下を使用して接続myserver.domain.org
して完了したい場合:
ssh m<TAB>
myserver.domain.org
予想されるシステムプロビジョニングを完了し、ローカルユーザーとman
のプロビジョニングも実行しますmessagebus
。これは愚かなことです。
ssh/scp
すべてのローカルユーザーを完了するのではなく、完了したいユーザーのリストを指定(ハードコード)できるように完了システムをどのように変更しますか?/etc/passwd
言い換えれば、私はssh
許可された答えのように無効なユーザーを完成させたくありませんscp
。しかし、私は次のリストを使用するのではなく、完了する独自のユーザーリストを提供したいと思います。/etc/passwd
答え1
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)