Удаленное автозаполнение Bash: измените каталог «запуск»

Я регулярно загружаю файлы с удаленного сервера, всегда из одного и того же каталога. Поэтому я написал пользовательскую функцию, которую я ввел в мой bashrc :

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

Прямо сейчас автозаполнение работает по умолчанию с файлами в текущем каталоге. Я хотел бы изменить автозаполнение так, чтобы bash автоматически подключался к серверу через ssh и autocompletes с файлами, которые находятся в myserver:/home/pierre/downloads/ .

В случае, если я не понимаю, вот пример: допустим, у меня есть my_file.txt в удаленном каталоге, я хочу иметь возможность сделать это:

download_from_my_server my_fi TAB
download_from_my_server my_file.txt

Как мне это сделать?

Примечания. Я уже использую соединение без пароля, автозаполнение rsync и scp работают хорошо, это не проблема. Я использую Ubuntu на обеих машинах, если это важно.

One Solution collect form web for “Удаленное автозаполнение Bash: измените каталог «запуск»”

Изменить : нарезал его еще немного.

Вы можете найти это полезным, от Администрации Debian: введение в завершение 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 
  • COMP_CWORD
  • COMP_WORDS
  • COMPREPLY
  • Почему мой фильтр rsync копирует одну включенную папку, а не другую?
  • rsync вызывает ошибки после синхронизации
  • Как избежать создания корневой папки источника в получателе при использовании rsync?
  • Rsync, включают только определенные типы файлов, исключая некоторые каталоги
  • Как rsync-файлы при установке USB-накопителя
  • как загрузить linux ядро ​​с помощью rsync
  • Не удается установить rsync (невозможно создать ... Ошибка ввода / вывода)
  • простое решение rsync с файловым менеджером (thunar или nautilus или ...)
  • Использовать rsync только с закрытыми файлами
  • Что означает все эти дополнительные данные от rsync?
  • inotifywait и rsync печатает временные имена файлов
  • Interesting Posts

    получить информацию об обновлении пакета в openSuSE

    Как получить код выхода параллельного процесса, запущенного xargs?

    DHCP-сервер: предлагает разные адреса подсети для разных интерфейсов

    служба fancontrol не запускается после перезагрузки open suse linux

    Легкая операционная система VirtualBox для одиночного гостя

    приглашение sudo не позволяет мне отправить мой пароль sudo

    Скопируйте stdout и stderr в файл журнала и оставьте их на консоли в самом скрипте

    find-command для определенных подкаталогов

    Комментировать все строки из последней прокомментированной строки в строке с 'foo'

    Как установить VMware Tools на Fedora 15?

    Зачем запускать путь к каталогу в качестве команды, возвращать «разрешение отказано», а не «команда не найдена»?

    Как предотвратить dwm при переключении тегов при запуске Skype

    обрезать и вытеснять видео и аудио с помощью avconv (или другого инструмента)

    Репозитории Ubuntu PPA можно использовать на Debian?

    xargs не генерирует правильную команду

    Linux и Unix - лучшая ОС в мире.