Sftp দিয়ে ট্যাব সমাপ্তি পাওয়া সম্ভব?


15

কখনও কখনও আমার দূরবর্তী সার্ভার থেকে আমার স্থানীয় মেশিনে দ্রুত একটি ফাইল অনুলিপি করা প্রয়োজন। এখানে আমার বর্তমান কর্মপ্রবাহ:

  1. আমি আমার রিমোট সার্ভারে এসএসএইচ করি, ফাইলটি সন্ধান করি এবং এর পুরো পথটি অনুলিপি করি।
  2. আমি নতুন টার্মিনাল ট্যাব খুলি এবং টাইপ করুন:

sftp user@hostname:/path/to/file (যেখানে / পাথ / টু / ফাইল হ'ল আমি পূর্বে অনুলিপি করেছি)

এটি কোনও ব্যথা নয় তবে এটি খুব সুন্দর হবে যদি আমি এসএফটিপি কমান্ডটি টাইপ করার সময় সরাসরি ট্যাব সমাপ্তি ব্যবহার করে ফাইলটির পথটি খুঁজে পেতে পারি 1

উদাহরণ হিসেবে বলা যায়, আমি টাইপ করা শুরু করতে পারে sftp user@hostname:/প্রেস TABএবং / ফোল্ডার একটি তালিকা পেতে। আমি তখন টাইপিং hoপ্রেসে যেতে পারতাম TABএবং এটি স্বয়ংক্রিয়ভাবে পূর্ণ হবে homeইত্যাদি ইত্যাদি

আমি নিশ্চিত নই যে এ জাতীয় বৈশিষ্ট্য উপস্থিত রয়েছে এবং অন্যথায়, বর্ণিত হিসাবে কাস্টম ট্যাব সমাপ্তির স্ক্রিপ্টটি কি তাত্ত্বিকভাবে সম্ভব? কোন পয়েন্টার কোথায় শুরু করবেন?

উত্তর:


7

শেলহোলিকের উত্তরের জন্য ধন্যবাদ, আমি এটিকে (কিছুটা) এসএফটিপি-র জন্য তৈরি করতে সক্ষম হয়েছি। প্রথমে /etc/bash_completion.d/sftpনীচের বিষয়বস্তু দিয়ে ফাইলটি তৈরি করুন :

# custom sftp(1) based on scp
# see http://askubuntu.com/questions/14645/is-it-possible-to-get-tab-completion-with-sftp
#
_sftp()
{
    local configfile cur userhost path prefix

    COMPREPLY=()
    cur=`_get_cword ":"`

    _expand || return 0

    if [[ "$cur" == *:* ]]; then
        local IFS=$'\t\n'
        # remove backslash escape from :
        cur=${cur/\\:/:}
        userhost=${cur%%?(\\):*}
        path=${cur#*:}
        # unescape spaces
        path=${path//\\\\\\\\ / }
        if [ -z "$path" ]; then
            # default to home dir of specified user on remote host
            path=$(ssh -o 'Batchmode yes' $userhost pwd 2>/dev/null)
        fi
        # escape spaces; remove executables, aliases, pipes and sockets;
        # add space at end of file names
        COMPREPLY=( $( ssh -o 'Batchmode yes' $userhost \
            command ls -aF1d "$path*" 2>/dev/null | \
            sed -e "s/[][(){}<>\",:;^&\!$=?\`|\\ ']/\\\\\\\\\\\\&/g" \
            -e 's/[*@|=]$//g' -e 's/[^\/]$/& /g' ) )
        return 0
    fi

    if [[ "$cur" = -F* ]]; then
        cur=${cur#-F}
        prefix=-F
    else
        # Search COMP_WORDS for '-F configfile' or '-Fconfigfile' argument
        set -- "${COMP_WORDS[@]}"
        while [ $# -gt 0 ]; do
            if [ "${1:0:2}" = -F ]; then
                if [ ${#1} -gt 2 ]; then
                    configfile="$(dequote "${1:2}")"
                else
                    shift
                    [ "$1" ] && configfile="$(dequote "$1")"
                fi
                break
            fi
            shift
        done

        [[ "$cur" == */* ]] || _known_hosts_real -c -a -F "$configfile" "$cur"
    fi
    # This approach is used instead of _filedir to get a space appended
    # after local file/dir completions, and $nospace retained for others.
    local IFS=$'\t\n'
    COMPREPLY=( "${COMPREPLY[@]}" $( command ls -aF1d $cur* 2>/dev/null | sed \
        -e "s/[][(){}<>\",:;^&\!$=?\`|\\ ']/\\\\&/g" \
        -e 's/[*@|=]$//g' -e 's/[^\/]$/& /g' -e "s/^/$prefix/") )

    return 0
}
complete -o nospace -F _sftp sftp

তারপরে . /etc/bash_completion.d/sftpস্ক্রিপ্টটি লোড করার জন্য আপনাকে বাশ করতে হবে ।

আমি সত্যিই যা করেছি তা হ'ল স্কেপ সমাপ্তির স্ক্রিপ্টটি অনুলিপি / পেস্ট করে /etc/bash_completion.d/sshএবং এসপিএফপি দিয়ে স্কিপ ইভেন্টগুলি প্রতিস্থাপন করে।


4

অন্য বিকল্প: lftpপরিবর্তে ব্যবহার করুন, যা ট্যাব সমাপ্তিতে চমত্কার নির্মিত হয়েছে (তবে এটি একবার শেল নয়, এটি শুরু করার পরে আসবে)) এটি এসএফটিপি এবং অন্যান্য অনেক প্রোটোকল কথা বলতে পারে।


2

ব্যবহার করবেন না sftp, ব্যবহার করুন scpএবং এটি কাজ করে। আপনার একটি এসএস কী দরকার হবে।


ধন্যবাদ, আমি আসলে এটি স্কিপি-র অটো সমাপ্তির স্ক্রিপ্ট ব্যবহার করে এসএফটিপি জন্য কাজ করতে সক্ষম হয়েছি। আমি স্কেপটিকে যতটা সম্ভব স্কিপকে ছাড়িয়ে যাওয়ার কথা বলার চেষ্টা করছি।
অলিভিয়ার লালনডে

scp এর জন্য আপনার কী-র জুড়ি দরকার নেই, তাই না?
Nanne

1

আমি শুনেছি যে একটি পঠন-সহ পাঠানো প্রোগ্রাম স্ট্যান্ডার্ড ওপেনএসএসএইচ কমান্ড লাইন প্রোগ্রাম এসএফপি অনুমতি দেবে পাঠানো ট্যাব সমাপ্তি কাজে লাগাতে দেয়। আমি এটি যাচ্ছি কিনা তা যাচাই করতে পারি না, তবে আমি বছরের পর বছর ধরে একই কার্যকারিতাটি চাইছি।

রিডলাইন এবং এসএফটিপি সহ তথ্য: http://www.greenend.org.uk/rjk/2005/withreadline.html

রিডলাইন লিঙ্ক সহ: http://www.greenend.org.uk/rjk/2005/with-readline-0.1.tar.bz2

আমাকে জানতে দাও কিভাবে এটি তোমার জন্য কাজ করে।

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