Скрипт Bash, работающий в Neovim, игнорирует команду чтения

Рассмотрим следующий сценарий Bash:

#!/usr/bin/env bash
read -rp "> " INPUT
echo "Your input is: $INPUT"
echo "Done"

Когда я открываю этот файл в обычном Vim и запускаю :!bash %, я получаю ожидаемый результат:

> тест

Ваш ввод: тест

Сделанный

Нажмите ENTER или введите команду, чтобы продолжить

Однако в Neovim запуск той же команды :!bash %, похоже, игнорирует строку read:

Ваш ввод:

Сделанный

Нажмите ENTER или введите команду, чтобы продолжить

Я использую Vim версии 8.2.500 и Neovim версии v0.4.3.

Выполнение скрипта из командной строки работает нормально, пока у меня такая проблема только при запуске в Neovim.

Что мне не хватает?


person berware    schedule 13.05.2020    source источник
comment
Это характерно для read в Bash или это происходит для всех инструментов, которые читают стандартный ввод?   -  person that other guy    schedule 14.05.2020
comment
@thatotherguy Хороший вопрос, аналогичный результат для сценария Python, так что, похоже, это влияет на стандартный ввод в целом.   -  person berware    schedule 14.05.2020


Ответы (1)


Из ручной записи для команды :!:

Команда выполняется в неинтерактивной оболочке, подключенной к каналу (не терминалу). Используйте |:terminal| для запуска интерактивной оболочки, подключенной к терминалу.

Когда он запускает bash, его стандартный ввод подключается к каналу, а не к терминалу, поэтому вы не можете использовать терминал для ответа на подсказки.

Поэтому постарайтесь

!te bash %s
person Barmar    schedule 13.05.2020
comment
Это было почти так! :te bash % помог мне. Спасибо! Требуется еще пара ключевых входных данных, чем в моем рабочем процессе Vim, поэтому я объявил, что эта привязка имеет эквивалентное поведение в Neovim с помощью F5: autocmd FileType sh map <F5> <Esc>:w<CR>:te bash %<CR>i - person berware; 14.05.2020