如何编写文本文件,然后在相同的BASH脚本中读取文本文件?

时间:2019-04-11 20:03:35

标签: bash vim tmux

我在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脚本仍在执行过程中如何将文件保存到磁盘的任何想法?

2 个答案:

答案 0 :(得分:2)

问题很可能(但是我不确定)是vim阻塞了,直到脚本完成才处理按键。我不知道是否可以让vim在后台运行脚本,但是您可以将热键绑定到tmux中,而不要使用run-shell -b,例如:

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

实际上,如果在tmux中执行此操作,则可能不需要脚本在后台运行,因为两个受影响的应用程序(vim和ipython)不会阻塞,并且tmux是否会无关紧要。因此,您只需将-b排除在外即可。

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

答案 1 :(得分:1)

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