如何编写文本文件,然后在同一个BASH脚本中读取它?

问题描述 投票:2回答:2

我在VIM中有一个热键,它将我带入命令模式并调用bash脚本。 bash脚本尝试以下步骤:

  1. 选择两个令牌之间的文本
  2. 将所选文本块发送到.py文件
  3. 将.py文件加载到ipython中

如果我手动输入所有内容,该脚本将起作用,但如果我运行该脚本,则在脚本完成之前,文本块不会保存为文件,这会导致IPython稍后尝试在脚本中加载文件时出错。

以下是我尝试过的步骤:

  1. 如果我的文件被保存在缓冲区中,我尝试了syncing & flushing
  2. 如果文件需要更多时间来编写,我尝试了sleep and wait
  3. 我还尝试了Asynchronous shell commands来查看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脚本仍处于执行状态时将文件保存到磁盘的任何想法?

bash vim tmux
2个回答
2
投票

问题很可能(我不确定这一点)vim是阻塞的,并且在脚本完成之前不处理按键。我不知道是否可以让vim在后台运行脚本,但如果你使用run-shell -b绑定tmux中的热键,你可以这样:

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

事实上,如果在tmux中执行此操作,您可能不需要脚本在后台运行,因为两个受影响的应用程序(vim和ipython)不会阻塞,并且tmux的确无关紧要。所以你可以把-b留下来。

您仍然几乎肯定需要在Enter和选择窗格之间休息一秒或半秒(“睡眠1”或“睡眠0.5”,实验),否则将在vim写入文件和ipython读取之间发生竞争它。


1
投票

我不确定在shell脚本中调用tmux的开销,但是建议您在没有它的情况下编写工作流程脚本 - 您可以使用sed来解析文件中两个标记之间的文本,将其传递给新的.py文件,以及然后将.py文件加载到ipython中。

© www.soinside.com 2019 - 2024. All rights reserved.