Как включить локальную ~ автозаполнение для scp?

Слишком поздно: машина, ОС и конфигурация больше не используются, поэтому я не могу проверить больше предложений. Я не сталкивался с этой проблемой в Fedora или Arch Linux. Если у вас возникла эта проблема, отправьте другой вопрос с подробной информацией о вашей конфигурации.

Всякий раз, когда я хочу скопировать файл из моего домашнего каталога, я столкнулся с этой проблемой: scp не будет автозаполнять пути, которым предшествует ~ (тильда). Это очень просто проверить, набрав scp ~/ и нажав клавишу Tab дважды – никаких завершений файла не отображаются. Даже если я укажу уникальный префикс пути, такой как scp ~/.bash_hist он не будет завершен. Это по дизайну, настраиваемому или ошибка?

Чтобы прояснить, все остальные части работы по завершению: имена хостов и пути на удаленных хостах завершены. Завершения путей с тильдой также работают с другими командами, такими как ls .

Могут ли быть некоторые ограничения при заполнении нестандартного ~ ? Mine указывает на /home/users/username и является монтированием NFS 3 на другой хост ( /home/username используется для критически важных вещей, таких как профиль браузера). Я не изменил $HOME ( /home/users/username ) или какое-то другое безумие.

В Fedora 19 он работает – вкладка завершения scp ~/foo приводит к замене ~ на /home/username и последующем завершении в обычном режиме.

Обратите внимание : этот вопрос не связан ни с автозаполнением, ни с правами root, ни с автозавершением. В завершении Bash установлен рабочий режим.

Запуск openssh-client 1: 5.9p1-5ubuntu1 и версия GNU bash 4.2.24 (1) -release (x86_64-pc-linux-gnu)

При работе в Debian Lenny сделайте следующее:

 apt-get install bash-completion 

Затем перейдите к ~ / .bash_profile, чтобы включить его локально или / etc / profile, чтобы добавить его в общую систему. Вставьте следующее:

 if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi и if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi 

Кажется, что auto-completion bash auto-completion путь. установите пакет bash-completion .

А затем в /etc/bash_completion.d/ssh есть ссылки на команду scp .

Имела ту же проблему (для чего она стоит, на OS X 10.11, фондовый bash 3.2.57, bash-completion 1.3 через варево). Следуя этому совету, я расширил тильду в файле завершения ssh ( /usr/local/etc/bash_completion.d/ssh в моем случае или в /etc/bash_completion.d/ssh иначе) следующим образом:

 _scp_local_files() { local IFS=$'\n' local dirsonly=false if [ "$1" = -d ]; then dirsonly=true shift fi cur="${cur/#\~/$HOME}" # <<< Expand tilde if $dirsonly ; then COMPREPLY=( "${COMPREPLY[@]}" $( command ls -aF1d $cur* 2>/dev/null | \ sed -e "s/$_scp_path_esc/\\\\&/g" -e '/[^\/]$/d' -e "s/^/$1/") ) else COMPREPLY=( "${COMPREPLY[@]}" $( command ls -aF1d $cur* 2>/dev/null | \ sed -e "s/$_scp_path_esc/\\\\&/g" -e 's/[*@|=]$//g' \ -e 's/[^\/]$/& /g' -e "s/^/$1/") ) fi COMPREPLY="${COMPREPLY/#$HOME/~}" # <<< Contract tilde 

Мне также было приятно смириться с тильдой в конце, держать дорожки красивыми и короткими (как изначально было напечатано).