Для Ubuntu 11.10 (Единство)
Перейдите к System Settings > Keyboard > Shortcuts > Custom Shortcuts. Добавьте новый ярлык, нажав кнопку +. Выберите имя для своего ярлыка, а в поле «Команда» введитеgnome-terminal -e "ping -c4 [your domain here]"
. Назначьте комбинацию сочетаний клавиш, выбрав ярлык и нажав желаемую комбинацию (например, Ctrl + Alt + P). Благодаря ответу от 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.
Благодаря ответу от 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.
Благодаря ответу от 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.
Благодаря ответу от 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.
Благодаря ответу от 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.
Благодаря ответу от 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.
Благодаря ответу от 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.
Благодаря ответу от 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.
Благодаря ответу от 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.
Благодаря ответу от 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.
Благодаря ответу от 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.
Другая альтернатива: вместо этого используйте lftp, которая имеет превосходное встроенное завершение вкладки (но это будет только после ее запуска, а не в оболочке). Он может говорить sftp и многие другие протоколы.
Не используйте sftp, используйте scp, и он работает. Вам понадобится ключ ssh.
Я слышал, что программа с именем-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
Пусть я знаю, как это работает для вас.
Я слышал, что программа с именем-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
Пусть я знаю, как это работает для вас.
Другая альтернатива: вместо этого используйте lftp, которая имеет превосходное встроенное завершение вкладки (но это будет только после ее запуска, а не в оболочке). Он может говорить sftp и многие другие протоколы.
Не используйте sftp, используйте scp, и он работает. Вам понадобится ключ ssh.
Я слышал, что программа с именем-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
Пусть я знаю, как это работает для вас.
Другая альтернатива: вместо этого используйте lftp, которая имеет превосходное встроенное завершение вкладки (но это будет только после ее запуска, а не в оболочке). Он может говорить sftp и многие другие протоколы.
Не используйте sftp, используйте scp, и он работает. Вам понадобится ключ ssh.
Я слышал, что программа с именем-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
Пусть я знаю, как это работает для вас.
Другая альтернатива: вместо этого используйте lftp, которая имеет превосходное встроенное завершение вкладки (но это будет только после ее запуска, а не в оболочке). Он может говорить sftp и многие другие протоколы.
Не используйте sftp, используйте scp, и он работает. Вам понадобится ключ ssh.
Я слышал, что программа с именем-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
Пусть я знаю, как это работает для вас.
Другая альтернатива: вместо этого используйте lftp, которая имеет превосходное встроенное завершение вкладки (но это будет только после ее запуска, а не в оболочке). Он может говорить sftp и многие другие протоколы.
Не используйте sftp, используйте scp, и он работает. Вам понадобится ключ ssh.
Я слышал, что программа с именем-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
Пусть я знаю, как это работает для вас.
Другая альтернатива: вместо этого используйте lftp, которая имеет превосходное встроенное завершение вкладки (но это будет только после ее запуска, а не в оболочке). Он может говорить sftp и многие другие протоколы.
Не используйте sftp, используйте scp, и он работает. Вам понадобится ключ ssh.
Другая альтернатива: вместо этого используйте lftp
, который имеет превосходное встроенное завершение табуляции (но это будет после его запуска, а не в оболочке). Он может говорить sftp и многие другие протоколы.