賞金の更新

賞金の更新

現在のディレクトリにファイルがあり、それをリモートサーバーにtest.txt転送したいとします。scp

完了を使用する場合:

scp -rp test<TAB>

zsh 補完機能は、残りのファイル名を完成させるのではなく、以下を提供します。

scp -rp test<TAB>
test.txt
testuser

testuser私のシステムのローカルユーザーです。リモートサーバーに接続したときにローカルユーザーのzsh完了が完了するのはなぜですか?

これは役に立たず、愚かなルールのように見えます。

scpsshと同じ完成ファイルを使用し、/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)

関連情報