Как написать текстовый файл, а затем прочитать его в том же BASH-скрипте? - PullRequest
2 голосов
/ 11 апреля 2019

У меня есть горячая клавиша в VIM, которая переводит меня в командный режим и вызывает скрипт bash. Сценарий bash выполняет следующие действия:

  1. Выберите текст между двумя токенами
  2. Отправить выделенный текстовый блок в файл .py
  3. Загрузить файл .py в ipython

Сценарий работает, если я набираю все вручную, но если я запускаю сценарий, текстовый блок не сохраняется как файл до тех пор, пока сценарий не будет завершен, что вызывает ошибку, когда IPython пытается загрузить файл позже в скрипт.

Вот шаги, которые я пробовал:

  1. Если мой файл находится в буфере, я попытался синхронизировать и очистить
  2. На случай, если для написания файла потребуется больше времени, я попытался спать и ждать
  3. Я также пытался Асинхронные команды оболочки , чтобы увидеть, получил ли сценарий bash приоритет над VIM, записывающим файл.
#!/bin/bash

# text to be written has been selected in VIM
tmux send-keys ':w jtemp.py'
tmux send-keys 'Enter'

# load code selection in ipython
tmux select-pane -t 1 
tmux send-keys '%load jtemp.py'
tmux send-keys 'Enter'
tmux send-keys 'Enter'

Есть какие-нибудь мысли о том, как я могу сохранить файл на диске, пока сценарий bash все еще находится в процессе?

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

Скорее всего (скорее всего, я не знаю этого), что vim блокирует и не обрабатывает нажатия клавиш до завершения скрипта.Я не знаю, можно ли заставить vim запускать скрипт в фоновом режиме, но вы могли бы, если бы вы связали горячую клавишу в tmux вместо использования run-shell -b, что-то вроде:

bind F1 run -b "bash /path/to/my/script"

InФактически, если вы делаете это в tmux, вам, вероятно, не понадобится скрипт для запуска в фоновом режиме, потому что два затронутых приложения (vim и ipython) не будут блокироваться, и не имеет значения, если tmux делает.Таким образом, вы можете просто не указывать -b.

Вам почти наверняка понадобится секунда или полсекунды сна ("сон 1" или "сон 0,5", эксперимент) между вводом и выбором-панель или будет гонка между vim, пишущим файл, и ipython, читающим его.

1 голос
/ 12 апреля 2019

Я не уверен в издержках вызова tmux в сценарии оболочки, но рекомендую вам сценарий вашего рабочего процесса без него - вы можете использовать sed для анализа текста между двумя токенами в файле, передавая его в новый файл .py, а затем загрузите этот файл .py в ipython.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...