Bash 원격 자동 완성: "시작" 디렉터리 변경

Bash 원격 자동 완성: "시작" 디렉터리 변경

나는 원격 서버에서 항상 같은 디렉터리에 있는 파일을 자주 다운로드합니다. 그래서 나는 사용자 정의 함수를 작성하여 내 함수에 넣었습니다 bashrc.

download_from_myserver () {
    for file in "$@"
    do
        rsync myserver:/home/pierre/downloads/"$file" .
    done
}

현재 자동 완성은 현재 디렉터리의 파일에 대해 기본적으로 작동합니다. bash가 자동으로 서버에 연결되어 ssh자동으로 완료되도록 자동 완성 기능을 변경하고 싶습니다 myserver:/home/pierre/downloads/.

확실하지 않은 경우 예를 들면 다음과 같습니다. 제가 my_file.txt원격 디렉터리에 있고 다음을 수행할 수 있기를 원한다고 가정해 보겠습니다.

download_from_my_server my_fiTAB
download_from_my_server my_file.txt

어떻게 해야 합니까?

참고: 저는 이미 비밀번호 없는 연결을 사용하고 있습니다. rsync 및 scp 자동 완성은 잘 작동합니다. 이는 문제가 되지 않습니다. 그것이 중요하다면 두 컴퓨터 모두에서 Ubuntu를 사용하고 있습니다.

답변1

편집하다: 좀 더 잘라주세요.

Debian Administration에서 다음 내용이 유용할 수 있습니다.Bash 완성 소개.


전체 스크립트: ( /some/location/my_ssh_autocomplete_script짧은 시작과 마찬가지로):

#!/bin/bash

_get_rsync_file_list()
{
    # For test:
    #local -a flist=("foo" "bar")
    #printf "%s " "${flist[@]}"
    # Or:
    ls /tmp
    
    # For live something in direction of:
    #ssh user@host 'ls /path/to/dir' <-- but not ls for other then dirty testing.
}

_GetOptSSH()
{
    local cur

    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"

    case "$cur" in
    -*)
        COMPREPLY=( $( compgen -W '-h --help' -- "$cur" ) );;
    *)
        # This could be done nicer I guess:
        COMPREPLY=( $( compgen -W "$(_get_rsync_file_list)" -- "$cur" ) );;
    esac

    return 0
}

스크립트 다운로드 /some/location/my_ssh_download_script:

#!/bin/bash

server="myserver"
path="/home/pierre/downloads"

download_from_myserver() {
    for file; do
        rsync "$server:$path/$file"
    done
}

case "$1" in
    "-h"|"--help")
        echo "Download files from '$server', path: '$path'" >&2
        exit 0;;
esac

download_from_myserver "$@"

존재하다 .bash_aliases:

alias download_from_myserver='/some/location/my_ssh_download_script'

존재하다 .bash_completion:

# Source complete script:
if . "/some/location/my_ssh_autocomplete_script" >/dev/null 2>&1; then
    # Add complete function to download alias:
    complete -F _GetOptSSH download_from_myserver
fi

관련 정보