では、zsh
sshとscpはのホストを使用して実行されます/etc/hosts
。ただし、大文字を使用して明らかに非ホストファイルを参照している場合でも、ホスト名を一致させようとします。
$ scp -rp F<tab>
FOO.txt foo.mydomain.com
この機能を無効にしたいです。私は次の行を変更しました/usr/share/zsh/functions/Completion/Unix/_ssh
compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" $config_hosts
到着
compadd "$@" $config_hosts
sshコマンドの入力を開始し、タブを使用してホスト名をオートコンプリートするとssh foo<tab>
エラーが発生します。
_all_labels:39: command not found: -J
これは何を意味し、どのように解決できますか?
2番目の問題は、Unix / _sshを変更した後に完了ファイルを再コンパイルできないことです。
zcompile Unix/ Unix.zwc
zcompile: can't open file: Unix.zwc
Ctrl+ +を押すと、次のようXな結果が出ます?。
$ scp -rp TE
Trace output left in /tmp/zsh10048scp3 (up-history to view)
TESTING.txt
testing testing.mydomain.com
ここで、TESTING.txtはファイルで、ホスト名testing
です。testing.mydomain.com
修正する:
_all_labels:39
ホストでのみ上記のエラーが発生していることがわかりましたProxyCommand
。~/.ssh/config
これには以下が含まれます。
Host testing testing.mydomain.com
Hostname testing.mydomain.com
User root
PubkeyAuthentication yes
StrictHostKeyChecking yes
UserKnownHostsFile ~/.ssh/known_hosts
ProxyCommand ssh server2.mydomain.com nc %h %p
答え1
前の行の「\」を削除していないことを確認してください。/usr/share/zsh/functions/完成/Unix/_ssh、同時に変更します。
_wanted hosts expl 'remote host name' \
compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" $config_hosts
こうしました(連続文字「\」を削除しました)求める行)次のようなエラーが発生します。
_all_labels:39: command not found: -J
別の可能性は、誤って「\」の後に余分なスペースを追加して無効にした可能性があることです。
あなたの質問の2番目の部分に関して使用する正しい構文は次のとおりです。
zcompile Unix.zwc Unix/*
(UnixのすべてをUnix.zwcにコンパイルします)