可以使用sftp获得制表符完成功能吗?

奥利维尔·拉隆德(Olivier Lalonde)

有时,我需要快速将文件从远程服务器复制到本地计算机。这是我当前的工作流程:

  1. 我通过SSH进入我的远程服务器,找到文件并复制其完整路径。
  2. 我打开新的终端选项卡,然后键入:

sftp user@hostname:/path/to/file (其中/ path / to / file是我先前复制的路径)

并不是很麻烦,但是如果我可以跳过步骤1并在键入sftp命令时直接使用制表符补全找到文件的路径,那将非常好。

为了说明这一点,我可以开始输入sftp user@hostname:/pressTAB并获得/中的文件夹列表。然后,我可以继续ho按印刷机TAB,它将自动完成到home,等等。

我不确定是否存在这样的功能,否则从理论上讲可以编写描述的自定义制表符完成脚本吗?关于从哪里开始的任何指针?

奥利维尔·拉隆德(Olivier Lalonde)

多亏了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并用sftp替换scp出现的事件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

可以使用sftp获得制表符完成功能吗?

来自分类Dev

我可以使用类似vi的hjkl键浏览zsh的制表符完成菜单吗?

来自分类Dev

在Windows中使用制表符完成功能更改目录时如何列出文件?

来自分类Dev

如何像Slackware上的Centos7一样在sftp中启用制表符完成功能?

来自分类Dev

python黑色格式化程序可以使用制表符代替空格吗?

来自分类Dev

zsh:使用Git命令的功能的制表符完成

来自分类Dev

如何在Vim中禁用制表符完成功能?

来自分类Dev

如何在Atom中禁用Emmet的制表符完成功能?

来自分类Dev

如何在交互式Python解释器中获取制表符完成功能?

来自分类Dev

如何在交互式Python解释器中获取制表符完成功能?

来自分类Dev

如何在Vim中禁用制表符完成功能?

来自分类Dev

如何在bash中查看命令的制表符完成功能?

来自分类Dev

如何在Atom中禁用Emmet的制表符完成功能?

来自分类Dev

Windows上的Anaconda是否具有制表符完成功能?

来自分类Dev

制表符的制表符完成

来自分类Dev

bash(或终端)可以从终端缓冲区内容自动完成(制表符完成)吗?

来自分类Dev

使用oh-my-zsh的带重音符号的制表符自动完成功能不起作用

来自分类Dev

在emacs中编辑shell脚本时可以使用bash自动完成功能吗?

来自分类Dev

如何在Scala的MainGenericRunner REPL(交互式解释器)中启用制表符完成功能?

来自分类Dev

为什么virtualenv有效地禁用了Python 3制表符完成功能?

来自分类Dev

制表符完成挂起

来自分类Dev

是否可以在榆树REPL中完成制表符?

来自分类Dev

是否可以使制表符补全用于参数提示?

来自分类Dev

跳过自动完成的括号,逗号等,并在制表符文本中使用制表符

来自分类Dev

如何使用Perl用制表符替换aray的每个条目中的单个空格?我可以使用类似sed的命令吗?

来自分类Dev

我可以将空格转换为制表符吗?

来自分类Dev

使用ZSH完成制表符时的剩余字符

来自分类Dev

Bash:使用cdable_vars完成制表符

来自分类Dev

使用制表符完成与执行`ls`不同的行为

Related 相关文章

  1. 1

    可以使用sftp获得制表符完成功能吗?

  2. 2

    我可以使用类似vi的hjkl键浏览zsh的制表符完成菜单吗?

  3. 3

    在Windows中使用制表符完成功能更改目录时如何列出文件?

  4. 4

    如何像Slackware上的Centos7一样在sftp中启用制表符完成功能?

  5. 5

    python黑色格式化程序可以使用制表符代替空格吗?

  6. 6

    zsh:使用Git命令的功能的制表符完成

  7. 7

    如何在Vim中禁用制表符完成功能?

  8. 8

    如何在Atom中禁用Emmet的制表符完成功能?

  9. 9

    如何在交互式Python解释器中获取制表符完成功能?

  10. 10

    如何在交互式Python解释器中获取制表符完成功能?

  11. 11

    如何在Vim中禁用制表符完成功能?

  12. 12

    如何在bash中查看命令的制表符完成功能?

  13. 13

    如何在Atom中禁用Emmet的制表符完成功能?

  14. 14

    Windows上的Anaconda是否具有制表符完成功能?

  15. 15

    制表符的制表符完成

  16. 16

    bash(或终端)可以从终端缓冲区内容自动完成(制表符完成)吗?

  17. 17

    使用oh-my-zsh的带重音符号的制表符自动完成功能不起作用

  18. 18

    在emacs中编辑shell脚本时可以使用bash自动完成功能吗?

  19. 19

    如何在Scala的MainGenericRunner REPL(交互式解释器)中启用制表符完成功能?

  20. 20

    为什么virtualenv有效地禁用了Python 3制表符完成功能?

  21. 21

    制表符完成挂起

  22. 22

    是否可以在榆树REPL中完成制表符?

  23. 23

    是否可以使制表符补全用于参数提示?

  24. 24

    跳过自动完成的括号,逗号等,并在制表符文本中使用制表符

  25. 25

    如何使用Perl用制表符替换aray的每个条目中的单个空格?我可以使用类似sed的命令吗?

  26. 26

    我可以将空格转换为制表符吗?

  27. 27

    使用ZSH完成制表符时的剩余字符

  28. 28

    Bash:使用cdable_vars完成制表符

  29. 29

    使用制表符完成与执行`ls`不同的行为

热门标签

归档