Я использую домашнюю Windows 10 (сборка 16299.248) и подключаюсь по SSH к удаленной машине Ubuntu 16.04 с различными SSH-клиентами (например, Putty / MobaXterm).
Я копирую следующий код из моей личной учетной записи GitHub в сеанс SSH:
cat <<-EOF >> "$HOME"/.bashrc
export s_a="/etc/nginx/sites-available"
export s_e="/etc/nginx/sites-enabled"
export drt="/var/www/html"
source "$HOME"/"$repo"/software_internal.sh
EOF
Я копирую это прямо из моей учетной записи GitHub здесь (необработанная версия) хотя следующая проблема возникает, даже если я копирую из необработанной версии GitHub.
Результат в удаленном Bash следующий:
> .export s_a="/etc/nginx/sites-available"
> .export s_e="/etc/nginx/sites-enabled"
> .export drt="/var/www/html"
> .source "$HOME"/"$repo"/software_internal.sh
> EOF
Обратите внимание на одну точку в начале почти каждой строки.
Что-то переводит таблицы в отдельные точки.
Проблема, которую я только что описал, возникает с различными типами клиентов SSH.
Люди также смогли воспроизвести проблему в системах Linux (Debian, Ubuntu), более того, если я использую подсистему Windows 10 для Linux (WSL), у меня не будет точек (будь то Powershell или CMD). Я также не использую какие-либо менеджеры вставки / буфера обмена в Windows 10.
Также нет никаких доказательств того, что GitHub использует какой-либо нетрадиционный символ табуляции.
Это происходит, когда я копирую либо из Mozilla Firefox, либо из Google Chrome.
Я ничего не менял в DigitalOcean Ubuntu Bash после его установки (после создания моей «капли» в терминологии DigitalOcean).
Кажется, это ошибка в GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
. Я также смог воспроизвести ошибку в стабильной версии Debian 9.3 с Bash 5.2. Тем не менее, этой проблемы нет в Arch, поэтому она, вероятно, уникальна для дистрибутивов Debian.
Проблема возникает не только в DigitalOcean, но и в Linode - инженеру Linode удалось воспроизвести это в Ubuntu 14.04, 16.04 и 17.04.
Возможно, DigitalOcean и Linode настраивают Ubuntu одинаково, и ошибка не в Bash, но по-прежнему уникальна для DigitalOcean и Linode.
Маловероятно, что указанная выше проблема возникнет из-за Windows 10, клиентов SSH, графического интерфейса пользователя GitHub или веб-браузеров; Скорее всего, он поступит либо из репозиториев Debian, либо из Bash в 4.3 / 5.2 / других, либо из комбинации Debian-Bash.
Как правильно справиться с этой проблемой? Я, конечно, мог бы удалить вкладки наследуемых документов, но это определенно то, чего я не хочу. Вкладки помогают мне лучше организовать наследственный документ.
Bash выполняет завершение имени файла внутри heredoc. В вашем каталоге нет не скрытый файлы (файлы, которые не начинаются с "."), поэтому самые длинные подстрока из символов, которые соответствуют началу всех имен файлов в каталоге, является '.', и это то, что предоставляется и остается в вашем вводе.
Одна и та же версия Bash демонстрирует такое поведение везде, где я ее пробовал, поэтому явно не ограничивается конкретным поставщиком VPS. Мне не удалось сделать эту остановку без полного отключения завершения (поэтому я не могу указать «Вот что нужно сделать Linode, чтобы исправить образ дистрибутива»), но есть довольно много обходных путей для вашего конкретного использования:
Самое простое решение, ничего не меняя в самом Bash, - это создать не скрытый файл в каталоге ($HOME
) до начала heredoc. Это приведет к тому, что завершение имени файла будет соответствовать 0 символам. Вы могли бы сделать это, скажем touch "$HOME"/myFile
.
Запустите оболочку с отключенной строкой чтения и делайте там свое дело. bash --noediting
Отключить завершение перед heredoc: bind 'set disable-completion on'