Возможно ли получить завершение вкладки с помощью sftp?

Для Ubuntu 11.10 (Единство)

Перейдите к System Settings > Keyboard > Shortcuts > Custom Shortcuts. Добавьте новый ярлык, нажав кнопку +. Выберите имя для своего ярлыка, а в поле «Команда» введите
gnome-terminal -e "ping -c4 [your domain here]"
. Назначьте комбинацию сочетаний клавиш, выбрав ярлык и нажав желаемую комбинацию (например, Ctrl + Alt + P).
14
задан 24 November 2010 в 05:17

44 ответа

Благодаря ответу от shellholic, я смог сделать это (несколько) для sftp. Сначала создайте файл /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

Затем в bash вам нужно выполнить . /etc/bash_completion.d/sftp, чтобы загрузить скрипт.

Все, что я действительно это было копирование / вставка скрипта завершения scp из /etc/bash_completion.d/ssh и замена вложений scp с помощью sftp.

7
ответ дан 26 May 2018 в 00:16

Благодаря ответу от shellholic, я смог сделать это (несколько) для sftp. Сначала создайте файл /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

Затем в bash вам нужно выполнить . /etc/bash_completion.d/sftp, чтобы загрузить скрипт.

Все, что я действительно это было копирование / вставка скрипта завершения scp из /etc/bash_completion.d/ssh и замена вложений scp с помощью sftp.

7
ответ дан 25 July 2018 в 22:51

Благодаря ответу от shellholic, я смог сделать это (несколько) для sftp. Сначала создайте файл /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

Затем в bash вам нужно выполнить . /etc/bash_completion.d/sftp, чтобы загрузить скрипт.

Все, что я действительно это было копирование / вставка скрипта завершения scp из /etc/bash_completion.d/ssh и замена вложений scp с помощью sftp.

7
ответ дан 27 July 2018 в 00:51

Благодаря ответу от shellholic, я смог сделать это (несколько) для sftp. Сначала создайте файл /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

Затем в bash вам нужно выполнить . /etc/bash_completion.d/sftp, чтобы загрузить скрипт.

Все, что я действительно это было копирование / вставка скрипта завершения scp из /etc/bash_completion.d/ssh и замена вложений scp с помощью sftp.

7
ответ дан 31 July 2018 в 10:42

Благодаря ответу от shellholic, я смог сделать это (несколько) для sftp. Сначала создайте файл /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

Затем в bash вам нужно выполнить . /etc/bash_completion.d/sftp, чтобы загрузить скрипт.

Все, что я действительно это было копирование / вставка скрипта завершения scp из /etc/bash_completion.d/ssh и замена вложений scp с помощью sftp.

7
ответ дан 31 July 2018 в 11:46

Благодаря ответу от shellholic, я смог сделать это (несколько) для sftp. Сначала создайте файл /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

Затем в bash вам нужно выполнить . /etc/bash_completion.d/sftp, чтобы загрузить скрипт.

Все, что я действительно это было копирование / вставка скрипта завершения scp из /etc/bash_completion.d/ssh и замена вложений scp с помощью sftp.

7
ответ дан 2 August 2018 в 04:14

Благодаря ответу от shellholic я смог сделать это (несколько) для sftp. Сначала создайте файл /etc/bash_completion.d/sftp со следующим содержимым:

  # custom sftp (1) на основе scp # см. Http: //  askubuntu.com/questions/14645/is-it-possible-to-get-tab-completion-with-sftp # _sftp () {local configfile cur userhost prefix COMPREPLY = () cur = `_get_cword": "` _expand |  |  return 0 if [["$ cur" == *: *]];  то локальный IFS = $ '\ t \n' # удаляет обратную косую черту из: cur = $ {cur / \\: /:} userhost = $ {cur %%? (\\): *} path = $ {cur #  *:} # unescape spaces path = $ {путь // \\\\\\\\ /}, если [-z "$ path"];  затем # по умолчанию для домашнего каталога указанного пользователя на удаленном хост-пути = $ (ssh -o 'Batchmode yes' $ userhost pwd 2 gt; / dev / null) fi # escape-пространства;  удалять исполняемые файлы, псевдонимы, трубы и сокеты;  # добавить место в конце имен файлов COMPREPLY = ($ (ssh -o 'Batchmode yes' $ userhost \ command ls -aF1d "$ path *" 2 & gt; / dev / null | \ sed -e "s / [] [(  ) {} & gt; \ ",:; ^ & amp; \! $ =? \` | \\ '] / \\\\\\\\\\\\\ & amp; / g "\ -e' s  / [* @ | =] $ // g '-e' s / [^ \ /] $ / & amp; / g ')) возвращает 0 fi, если [["$ cur" = -F *]], тогда cur  = $ {cur # -F} prefix = -F else # Поиск COMP_WORDS для набора аргументов '-F configfile' или '-Fconfigfile' - $ {COMP_WORDS [@]} "while [$ # -gt 0]; do  if ["$ {1: 0: 2}" = -F], тогда если [$ {# 1} -gt 2], тогда configfile = "$ (dequote" $ {1: 2} ")" else shift [  "$ 1"] & amp; configfile = "$ (dequote" $ 1 ")" fi break fi shift done [["$ cur" == * / *]] || _known_hosts_real -c -a -F "$ configfile"  "$ cur" fi # Этот подход используется вместо _filedir, чтобы получить добавленное пространство # после локального завершения файла / dir и $ nospace, сохраненного для других. local IFS = $ '\ t \n' COMPREPLY = ("$ {COMPREPLY  [@]} "$ (команда ls -aF1d $ cur * 2 & gt; / dev / null | sed \ -e" s / [] [() {} & lt; gt; \ ",:; ^ & amp; \! $  =? \ `| \\ '] / \\\\ & amp; / g" \ -e' s / [* @ | =] $ // g '-e' s / [^ \ /]  $ / & Амп;  / g '-e "s / ^ / $ prefix /")) return 0} complete -o nospace -F _sftp sftp  

Тогда в bash вам нужно выполнить . /etc/bash_completion.d/sftp, чтобы загрузить скрипт.

Все, что я действительно сделал, это скопировать / вставить скрипт завершения scp из /etc/bash_completion.d/ssh и заменить вхождения scp с помощью sftp.

7
ответ дан 4 August 2018 в 20:19

Благодаря ответу от shellholic я смог сделать это (несколько) для sftp. Сначала создайте файл /etc/bash_completion.d/sftp со следующим содержимым:

  # custom sftp (1) на основе scp # см. Http: //  askubuntu.com/questions/14645/is-it-possible-to-get-tab-completion-with-sftp # _sftp () {local configfile cur userhost prefix COMPREPLY = () cur = `_get_cword": "` _expand |  |  return 0 if [["$ cur" == *: *]];  то локальный IFS = $ '\ t \n' # удаляет обратную косую черту из: cur = $ {cur / \\: /:} userhost = $ {cur %%? (\\): *} path = $ {cur #  *:} # unescape spaces path = $ {путь // \\\\\\\\ /}, если [-z "$ path"];  затем # по умолчанию для домашнего каталога указанного пользователя на удаленном хост-пути = $ (ssh -o 'Batchmode yes' $ userhost pwd 2 gt; / dev / null) fi # escape-пространства;  удалять исполняемые файлы, псевдонимы, трубы и сокеты;  # добавить место в конце имен файлов COMPREPLY = ($ (ssh -o 'Batchmode yes' $ userhost \ command ls -aF1d "$ path *" 2 & gt; / dev / null | \ sed -e "s / [] [(  ) {} & gt; \ ",:; ^ & amp; \! $ =? \` | \\ '] / \\\\\\\\\\\\\ & amp; / g "\ -e' s  / [* @ | =] $ // g '-e' s / [^ \ /] $ / & amp; / g ')) возвращает 0 fi, если [["$ cur" = -F *]], тогда cur  = $ {cur # -F} prefix = -F else # Поиск COMP_WORDS для набора аргументов '-F configfile' или '-Fconfigfile' - $ {COMP_WORDS [@]} "while [$ # -gt 0]; do  if ["$ {1: 0: 2}" = -F], тогда если [$ {# 1} -gt 2], тогда configfile = "$ (dequote" $ {1: 2} ")" else shift [  "$ 1"] & amp; configfile = "$ (dequote" $ 1 ")" fi break fi shift done [["$ cur" == * / *]] || _known_hosts_real -c -a -F "$ configfile"  "$ cur" fi # Этот подход используется вместо _filedir, чтобы получить добавленное пространство # после локального завершения файла / dir и $ nospace, сохраненного для других. local IFS = $ '\ t \n' COMPREPLY = ("$ {COMPREPLY  [@]} "$ (команда ls -aF1d $ cur * 2 & gt; / dev / null | sed \ -e" s / [] [() {} & lt; gt; \ ",:; ^ & amp; \! $  =? \ `| \\ '] / \\\\ & amp; / g" \ -e' s / [* @ | =] $ // g '-e' s / [^ \ /]  $ / & Амп;  / g '-e "s / ^ / $ prefix /")) return 0} complete -o nospace -F _sftp sftp  

Тогда в bash вам нужно выполнить . /etc/bash_completion.d/sftp, чтобы загрузить скрипт.

Все, что я действительно сделал, это скопировать / вставить скрипт завершения scp из /etc/bash_completion.d/ssh и заменить вхождения scp с помощью sftp.

7
ответ дан 6 August 2018 в 04:19

Благодаря ответу от shellholic я смог сделать это (несколько) для sftp. Сначала создайте файл /etc/bash_completion.d/sftp со следующим содержимым:

  # custom sftp (1) на основе scp # см. Http: //  askubuntu.com/questions/14645/is-it-possible-to-get-tab-completion-with-sftp # _sftp () {local configfile cur userhost prefix COMPREPLY = () cur = `_get_cword": "` _expand |  |  return 0 if [["$ cur" == *: *]];  то локальный IFS = $ '\ t \n' # удаляет обратную косую черту из: cur = $ {cur / \\: /:} userhost = $ {cur %%? (\\): *} path = $ {cur #  *:} # unescape spaces path = $ {путь // \\\\\\\\ /}, если [-z "$ path"];  затем # по умолчанию для домашнего каталога указанного пользователя на удаленном хост-пути = $ (ssh -o 'Batchmode yes' $ userhost pwd 2 gt; / dev / null) fi # escape-пространства;  удалять исполняемые файлы, псевдонимы, трубы и сокеты;  # добавить место в конце имен файлов COMPREPLY = ($ (ssh -o 'Batchmode yes' $ userhost \ command ls -aF1d "$ path *" 2 & gt; / dev / null | \ sed -e "s / [] [(  ) {} & gt; \ ",:; ^ & amp; \! $ =? \` | \\ '] / \\\\\\\\\\\\\ & amp; / g "\ -e' s  / [* @ | =] $ // g '-e' s / [^ \ /] $ / & amp; / g ')) возвращает 0 fi, если [["$ cur" = -F *]], тогда cur  = $ {cur # -F} prefix = -F else # Поиск COMP_WORDS для набора аргументов '-F configfile' или '-Fconfigfile' - $ {COMP_WORDS [@]} "while [$ # -gt 0]; do  if ["$ {1: 0: 2}" = -F], тогда если [$ {# 1} -gt 2], тогда configfile = "$ (dequote" $ {1: 2} ")" else shift [  "$ 1"] & amp; configfile = "$ (dequote" $ 1 ")" fi break fi shift done [["$ cur" == * / *]] || _known_hosts_real -c -a -F "$ configfile"  "$ cur" fi # Этот подход используется вместо _filedir, чтобы получить добавленное пространство # после локального завершения файла / dir и $ nospace, сохраненного для других. local IFS = $ '\ t \n' COMPREPLY = ("$ {COMPREPLY  [@]} "$ (команда ls -aF1d $ cur * 2 & gt; / dev / null | sed \ -e" s / [] [() {} & lt; gt; \ ",:; ^ & amp; \! $  =? \ `| \\ '] / \\\\ & amp; / g" \ -e' s / [* @ | =] $ // g '-e' s / [^ \ /]  $ / & Амп;  / g '-e "s / ^ / $ prefix /")) return 0} complete -o nospace -F _sftp sftp  

Тогда в bash вам нужно выполнить . /etc/bash_completion.d/sftp, чтобы загрузить скрипт.

Все, что я действительно сделал, это скопировать / вставить скрипт завершения scp из /etc/bash_completion.d/ssh и заменить вхождения scp с помощью sftp.

7
ответ дан 7 August 2018 в 22:24

Благодаря ответу от shellholic я смог сделать это (несколько) для sftp. Сначала создайте файл /etc/bash_completion.d/sftp со следующим содержимым:

  # custom sftp (1) на основе scp # см. Http: //  askubuntu.com/questions/14645/is-it-possible-to-get-tab-completion-with-sftp # _sftp () {local configfile cur userhost prefix COMPREPLY = () cur = `_get_cword": "` _expand |  |  return 0 if [["$ cur" == *: *]];  то локальный IFS = $ '\ t \n' # удаляет обратную косую черту из: cur = $ {cur / \\: /:} userhost = $ {cur %%? (\\): *} path = $ {cur #  *:} # unescape spaces path = $ {путь // \\\\\\\\ /}, если [-z "$ path"];  затем # по умолчанию для домашнего каталога указанного пользователя на удаленном хост-пути = $ (ssh -o 'Batchmode yes' $ userhost pwd 2 gt; / dev / null) fi # escape-пространства;  удалять исполняемые файлы, псевдонимы, трубы и сокеты;  # добавить место в конце имен файлов COMPREPLY = ($ (ssh -o 'Batchmode yes' $ userhost \ command ls -aF1d "$ path *" 2 & gt; / dev / null | \ sed -e "s / [] [(  ) {} & gt; \ ",:; ^ & amp; \! $ =? \` | \\ '] / \\\\\\\\\\\\\ & amp; / g "\ -e' s  / [* @ | =] $ // g '-e' s / [^ \ /] $ / & amp; / g ')) возвращает 0 fi, если [["$ cur" = -F *]], тогда cur  = $ {cur # -F} prefix = -F else # Поиск COMP_WORDS для набора аргументов '-F configfile' или '-Fconfigfile' - $ {COMP_WORDS [@]} "while [$ # -gt 0]; do  if ["$ {1: 0: 2}" = -F], тогда если [$ {# 1} -gt 2], тогда configfile = "$ (dequote" $ {1: 2} ")" else shift [  "$ 1"] & amp; configfile = "$ (dequote" $ 1 ")" fi break fi shift done [["$ cur" == * / *]] || _known_hosts_real -c -a -F "$ configfile"  "$ cur" fi # Этот подход используется вместо _filedir, чтобы получить добавленное пространство # после локального завершения файла / dir и $ nospace, сохраненного для других. local IFS = $ '\ t \n' COMPREPLY = ("$ {COMPREPLY  [@]} "$ (команда ls -aF1d $ cur * 2 & gt; / dev / null | sed \ -e" s / [] [() {} & lt; gt; \ ",:; ^ & amp; \! $  =? \ `| \\ '] / \\\\ & amp; / g" \ -e' s / [* @ | =] $ // g '-e' s / [^ \ /]  $ / & Амп;  / g '-e "s / ^ / $ prefix /")) return 0} complete -o nospace -F _sftp sftp  

Тогда в bash вам нужно выполнить . /etc/bash_completion.d/sftp, чтобы загрузить скрипт.

Все, что я действительно сделал, это скопировать / вставить скрипт завершения scp из /etc/bash_completion.d/ssh и заменить вхождения scp с помощью sftp.

7
ответ дан 10 August 2018 в 10:33

Благодаря ответу от shellholic я смог сделать это (несколько) для sftp. Сначала создайте файл /etc/bash_completion.d/sftp со следующим содержимым:

  # custom sftp (1) на основе scp # см. Http: //  askubuntu.com/questions/14645/is-it-possible-to-get-tab-completion-with-sftp # _sftp () {local configfile cur userhost prefix COMPREPLY = () cur = `_get_cword": "` _expand |  |  return 0 if [["$ cur" == *: *]];  то локальный IFS = $ '\ t \n' # удаляет обратную косую черту из: cur = $ {cur / \\: /:} userhost = $ {cur %%? (\\): *} path = $ {cur #  *:} # unescape spaces path = $ {путь // \\\\\\\\ /}, если [-z "$ path"];  затем # по умолчанию для домашнего каталога указанного пользователя на удаленном хост-пути = $ (ssh -o 'Batchmode yes' $ userhost pwd 2 gt; / dev / null) fi # escape-пространства;  удалять исполняемые файлы, псевдонимы, трубы и сокеты;  # добавить место в конце имен файлов COMPREPLY = ($ (ssh -o 'Batchmode yes' $ userhost \ command ls -aF1d "$ path *" 2 & gt; / dev / null | \ sed -e "s / [] [(  ) {} & gt; \ ",:; ^ & amp; \! $ =? \` | \\ '] / \\\\\\\\\\\\\ & amp; / g "\ -e' s  / [* @ | =] $ // g '-e' s / [^ \ /] $ / & amp; / g ')) возвращает 0 fi, если [["$ cur" = -F *]], тогда cur  = $ {cur # -F} prefix = -F else # Поиск COMP_WORDS для набора аргументов '-F configfile' или '-Fconfigfile' - $ {COMP_WORDS [@]} "while [$ # -gt 0]; do  if ["$ {1: 0: 2}" = -F], тогда если [$ {# 1} -gt 2], тогда configfile = "$ (dequote" $ {1: 2} ")" else shift [  "$ 1"] & amp; configfile = "$ (dequote" $ 1 ")" fi break fi shift done [["$ cur" == * / *]] || _known_hosts_real -c -a -F "$ configfile"  "$ cur" fi # Этот подход используется вместо _filedir, чтобы получить добавленное пространство # после локального завершения файла / dir и $ nospace, сохраненного для других. local IFS = $ '\ t \n' COMPREPLY = ("$ {COMPREPLY  [@]} "$ (команда ls -aF1d $ cur * 2 & gt; / dev / null | sed \ -e" s / [] [() {} & lt; gt; \ ",:; ^ & amp; \! $  =? \ `| \\ '] / \\\\ & amp; / g" \ -e' s / [* @ | =] $ // g '-e' s / [^ \ /]  $ / & Амп;  / g '-e "s / ^ / $ prefix /")) return 0} complete -o nospace -F _sftp sftp  

Тогда в bash вам нужно выполнить . /etc/bash_completion.d/sftp, чтобы загрузить скрипт.

Все, что я действительно сделал, это скопировать / вставить скрипт завершения scp из /etc/bash_completion.d/ssh и заменить вхождения scp с помощью sftp.

7
ответ дан 13 August 2018 в 17:03

Другая альтернатива: вместо этого используйте lftp, которая имеет превосходное встроенное завершение вкладки (но это будет только после ее запуска, а не в оболочке). Он может говорить sftp и многие другие протоколы.

3
ответ дан 26 May 2018 в 00:16

Не используйте sftp, используйте scp, и он работает. Вам понадобится ключ ssh.

2
ответ дан 26 May 2018 в 00:16
  • 1
    Спасибо, я действительно смог заставить его работать для sftp, используя скрипт автозавершения scp. Я пытаюсь использовать sftp как можно больше, так как предполагается, что он заменит scp. – Olivier Lalonde 24 November 2010 в 06:42
  • 2
    вам действительно не нужна пара ключей для scp, не так ли? – Nanne 27 May 2013 в 11:28

Я слышал, что программа с именем-readline позволит стандартной программе командной строки OpenSSH sftp использовать завершение табуляции. Я не могу проверить, что он работает, но я уже давно нуждаюсь в такой же функциональности.

info on-readline и sftp: http://www.greenend.org.uk/rjk/2005 /withreadline.html

с ссылкой-readline: http://www.greenend.org.uk/rjk/2005/withreadline.html

Пусть я знаю, как это работает для вас.

1
ответ дан 26 May 2018 в 00:16

Я слышал, что программа с именем-readline позволит стандартной программе командной строки OpenSSH sftp использовать завершение табуляции. Я не могу проверить, что он работает, но я уже давно нуждаюсь в такой же функциональности.

info on-readline и sftp: http://www.greenend.org.uk/rjk/2005 /withreadline.html

с ссылкой-readline: http://www.greenend.org.uk/rjk/2005/withreadline.html

Пусть я знаю, как это работает для вас.

1
ответ дан 25 July 2018 в 22:51

Другая альтернатива: вместо этого используйте lftp, которая имеет превосходное встроенное завершение вкладки (но это будет только после ее запуска, а не в оболочке). Он может говорить sftp и многие другие протоколы.

3
ответ дан 25 July 2018 в 22:51

Не используйте sftp, используйте scp, и он работает. Вам понадобится ключ ssh.

2
ответ дан 25 July 2018 в 22:51
  • 1
    Спасибо, я действительно смог заставить его работать для sftp, используя скрипт автозавершения scp. Я пытаюсь использовать sftp как можно больше, так как предполагается, что он заменит scp. – Olivier Lalonde 24 November 2010 в 06:42
  • 2
    вам действительно не нужна пара ключей для scp, не так ли? – Nanne 27 May 2013 в 11:28

Я слышал, что программа с именем-readline позволит стандартной программе командной строки OpenSSH sftp использовать завершение табуляции. Я не могу проверить, что он работает, но я уже давно нуждаюсь в такой же функциональности.

info on-readline и sftp: http://www.greenend.org.uk/rjk/2005 /withreadline.html

с ссылкой-readline: http://www.greenend.org.uk/rjk/2005/withreadline.html

Пусть я знаю, как это работает для вас.

1
ответ дан 27 July 2018 в 00:51

Другая альтернатива: вместо этого используйте lftp, которая имеет превосходное встроенное завершение вкладки (но это будет только после ее запуска, а не в оболочке). Он может говорить sftp и многие другие протоколы.

3
ответ дан 27 July 2018 в 00:51

Не используйте sftp, используйте scp, и он работает. Вам понадобится ключ ssh.

2
ответ дан 27 July 2018 в 00:51
  • 1
    Спасибо, я действительно смог заставить его работать для sftp, используя скрипт автозавершения scp. Я пытаюсь использовать sftp как можно больше, так как предполагается, что он заменит scp. – Olivier Lalonde 24 November 2010 в 06:42
  • 2
    вам действительно не нужна пара ключей для scp, не так ли? – Nanne 27 May 2013 в 11:28

Я слышал, что программа с именем-readline позволит стандартной программе командной строки OpenSSH sftp использовать завершение табуляции. Я не могу проверить, что он работает, но я уже давно нуждаюсь в такой же функциональности.

info on-readline и sftp: http://www.greenend.org.uk/rjk/2005 /withreadline.html

с ссылкой-readline: http://www.greenend.org.uk/rjk/2005/withreadline.html

Пусть я знаю, как это работает для вас.

1
ответ дан 31 July 2018 в 10:42

Другая альтернатива: вместо этого используйте lftp, которая имеет превосходное встроенное завершение вкладки (но это будет только после ее запуска, а не в оболочке). Он может говорить sftp и многие другие протоколы.

3
ответ дан 31 July 2018 в 10:42

Не используйте sftp, используйте scp, и он работает. Вам понадобится ключ ssh.

2
ответ дан 31 July 2018 в 10:42
  • 1
    Спасибо, я действительно смог заставить его работать для sftp, используя скрипт автозавершения scp. Я пытаюсь использовать sftp как можно больше, так как предполагается, что он заменит scp. – Olivier Lalonde 24 November 2010 в 06:42
  • 2
    вам действительно не нужна пара ключей для scp, не так ли? – Nanne 27 May 2013 в 11:28

Я слышал, что программа с именем-readline позволит стандартной программе командной строки OpenSSH sftp использовать завершение табуляции. Я не могу проверить, что он работает, но я уже давно нуждаюсь в такой же функциональности.

info on-readline и sftp: http://www.greenend.org.uk/rjk/2005 /withreadline.html

с ссылкой-readline: http://www.greenend.org.uk/rjk/2005/withreadline.html

Пусть я знаю, как это работает для вас.

1
ответ дан 31 July 2018 в 11:46

Другая альтернатива: вместо этого используйте lftp, которая имеет превосходное встроенное завершение вкладки (но это будет только после ее запуска, а не в оболочке). Он может говорить sftp и многие другие протоколы.

3
ответ дан 31 July 2018 в 11:46

Не используйте sftp, используйте scp, и он работает. Вам понадобится ключ ssh.

2
ответ дан 31 July 2018 в 11:46
  • 1
    Спасибо, я действительно смог заставить его работать для sftp, используя скрипт автозавершения scp. Я пытаюсь использовать sftp как можно больше, так как предполагается, что он заменит scp. – Olivier Lalonde 24 November 2010 в 06:42
  • 2
    вам действительно не нужна пара ключей для scp, не так ли? – Nanne 27 May 2013 в 11:28

Я слышал, что программа с именем-readline позволит стандартной программе командной строки OpenSSH sftp использовать завершение табуляции. Я не могу проверить, что он работает, но я уже давно нуждаюсь в такой же функциональности.

info on-readline и sftp: http://www.greenend.org.uk/rjk/2005 /withreadline.html

с ссылкой-readline: http://www.greenend.org.uk/rjk/2005/withreadline.html

Пусть я знаю, как это работает для вас.

1
ответ дан 2 August 2018 в 04:14

Другая альтернатива: вместо этого используйте lftp, которая имеет превосходное встроенное завершение вкладки (но это будет только после ее запуска, а не в оболочке). Он может говорить sftp и многие другие протоколы.

3
ответ дан 2 August 2018 в 04:14

Не используйте sftp, используйте scp, и он работает. Вам понадобится ключ ssh.

2
ответ дан 2 August 2018 в 04:14
  • 1
    Спасибо, я действительно смог заставить его работать для sftp, используя скрипт автозавершения scp. Я пытаюсь использовать sftp как можно больше, так как предполагается, что он заменит scp. – Olivier Lalonde 24 November 2010 в 06:42
  • 2
    вам действительно не нужна пара ключей для scp, не так ли? – Nanne 27 May 2013 в 11:28

Другая альтернатива: вместо этого используйте lftp , который имеет превосходное встроенное завершение табуляции (но это будет после его запуска, а не в оболочке). Он может говорить sftp и многие другие протоколы.

3
ответ дан 4 August 2018 в 20:19

Другие вопросы по тегам:

Похожие вопросы: