~ / .Ssh / কনফিগারেশনে সংজ্ঞায়িত হোস্টগুলির জন্য ট্যাব সমাপ্তি ইয়োসেমাইটে আর কাজ করে না


38

আমি ~/.ssh/configসার্ভার সংযোগে আমার কাজের জীবন সহজ করার জন্য আমার ফাইল তৈরি করার চেষ্টা করছি ।

ম্যাভেরিক্সে সবাই সঠিকভাবে কাজ করেছিল এবং tabআমি এর সাহায্যে এই জাতীয় ফাইল সহ হোস্টের নামটি স্বতঃপূরণ করতে সক্ষম হয়েছি:

Host test-host-name
    HostName 192.168.1.2
    User root

ইয়োসেমাইটে একই কনফিগারেশনের একটি আলাদা আচরণ রয়েছে। আমি যখন ssh tশেল টাইপ করি তখন tabহোস্টের নামটি স্বয়ংক্রিয়ভাবে পূর্ণ হয় না।

কেউ কি জানেন যে ইয়োসেমাইটে কিছু পরিবর্তন হয়েছে এবং এখন এটি কাজ করার জন্য আমার কিছু করা দরকার?

উত্তর:


37

ব্রিউয়েরbash-completion মাধ্যমে ইনস্টল করে আপনি ব্যাশ শেল সম্পূর্ণ করতে সক্ষম করতে পারেন :

brew install bash-completion

তারপরে আপনার সাথে নিম্নলিখিতগুলি যুক্ত করুন ~/.bash_profile:

if [ -f $(brew --prefix)/etc/bash_completion ]; then
. $(brew --prefix)/etc/bash_completion
fi

সূত্র

(সম্পাদনা: brew tap homebrew/completions2018 হিসাবে অবহেলা করা হয়েছে))


+1 :) ব্যাশ-সমাপ্তি -১.৩.৩.১০ হাই_সিয়ারার ইনস্টল করার সময়, এটি আমাকে যুক্ত করা উচিত বলে দেয় [ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion। আপনি কোন সংস্করণটি (সে বা আপনার) পছন্দ করা উচিত এবং কেন তা ব্যাখ্যা করতে পারেন?
জান ন্যাশ

15

আমি ধরে নিলাম আপনার ম্যাকের শেলটি বাশ।

আপনাকে ssh কমান্ডটি সম্পূর্ণ করতে হবে, আরও বিশদ জন্য আপনি পড়তে পারেন man complete

_complete_ssh_hosts ()
{
        COMPREPLY=()
        cur="${COMP_WORDS[COMP_CWORD]}"
        comp_ssh_hosts=`cat ~/.ssh/known_hosts | \
                        cut -f 1 -d ' ' | \
                        sed -e s/,.*//g | \
                        grep -v ^# | \
                        uniq | \
                        grep -v "\[" ;
                cat ~/.ssh/config | \
                        grep "^Host " | \
                        awk '{print $2}'
                `
        COMPREPLY=( $(compgen -W "${comp_ssh_hosts}" -- $cur))
        return 0
}
complete -F _complete_ssh_hosts ssh

sourceআপনার টার্মিনালে লোড করার জন্য নতুন কমান্ড পাওয়ার জন্য আপনার ফাইলের দরকার হবে তা ভুলে যাবেন না । অথবা আপনি এই কোডটি .বাশ_প্রফাইলে রাখতে পারেন


হ্যাঁ, খোলটি বাশ। মাভেরিকসে কেন আমাকে এই জিনিসগুলি করার দরকার ছিল না?
রিকিট্রেস

না, আমি এখনই পরীক্ষা করেছি। আমি ডিফল্টভাবে ম্যাভেরিক্সে এটি করতে পারি না।
নেলসন

comp_ssh_hosts=$(awk -F , 'FNR== NR && ! /^#|\[/ {field = $1} FNR != NR && /^Host / {field = $2} {hosts[field]} END {for (host in hosts) {print host}' "$HOME/.ssh/known hosts" "$HOME/.ssh/config")
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

2

ম্যাকওয়ার্ডের এই নিবন্ধ থেকে ।

এতে নিম্নলিখিতগুলি অনুলিপি করুন / আটকান ~/.bash_profile:

complete -o default -o nospace -W "$(/usr/bin/env ruby -ne 'puts $_.split(/[,\s]+/)[1..-1].reject{|host| host.match(/\*|\?/)} if $_.match(/^\s*Host\s+/);' < $HOME/.ssh/config)" scp sftp ssh

তারপরে আপনাকে হয় আপনার টার্মিনালটি পুনরায় চালু করতে হবে বা টাইপ করতে হবে source ~/.bash_profile(নোট করুন যে পরবর্তীটি কেবলমাত্র আপনার বর্তমান ট্যাবে কাজ করবে)।


আমার পক্ষে কাজ করেনি। তবে আপেল.স্ট্যাকেক্সেঞ্জাওএ /a/168168/136365 করেছে। আমি মনে করি এরকম কোনও কিছুর জন্য রুবীর উপর নির্ভর করা এড়ানো ভাল।
বেন ক্র্যাসি

0

এফওয়াইআই, আমি নিশ্চিত নেলসনের জবাবের সরাসরি প্রতিক্রিয়া জানাতে পারি না কারণ এটি সম্পর্কে মন্তব্য করার মতো যথেষ্ট খ্যাতি আমি এখনও তৈরি করি নি, তবে এল ক্যাপ্টেন চালিত আমার মেশিনটিতে ^Mআমার কনফিগারেশন ফাইল থেকে সমস্ত হোস্টের নাম যুক্ত করা হয়েছিল । আমাকে হয় \rআমার $IFSচলকটিতে যোগ করতে হয়েছিল বা \rদ্বিতীয়টির আউটপুট থেকে সমস্ত দৃষ্টান্ত সরিয়ে / প্রতিস্থাপন করতে হয়েছিল cat। শেষ পর্যন্ত, আমি tr '\r' '\n'কমান্ড চেইনটিকে এর মতো দেখতে আরও যোগ করে পরবর্তীটি করেছি :

cat ~/.ssh/config | \
        grep "^Host " | \
        awk '{print $2}' | \
        tr '\r' '\n'

-1

আপনি / ইত্যাদি / হোস্টগুলিতে এন্ট্রি যুক্ত করতে এবং সেগুলি হোস্ট নাম স্বতঃপূরণে ব্যবহার করতে পারেন:

"ssh @" + [TAB]

সিস্টেমটি এই ফাইলটি পুনরায় লোড করতে পুনরায় বুট করা দরকার।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.