我怎样才能写一个文本文件,然后在同一个 Bash 脚本中读取它?

How can I write a text file, and then read from it in the same Bash script?

我在 Vim 中有一个热键,可以让我进入命令模式并调用 Bash 脚本。 Bash 脚本尝试以下步骤:

  1. Select 两个标记之间的文本
  2. 将选定的文本块发送到 .py 文件
  3. 将 .py 文件加载到 IPython

如果我手动输入所有内容,脚本可以正常工作,但如果我 运行 脚本,文本块在脚本完成后才会另存为文件,导致 [=40] 时出错=] 尝试稍后在脚本中加载文件。

以下是我尝试过的步骤:

  1. 如果我的文件被保存在缓冲区中,我尝试了 syncing and 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 脚本仍在处理时将文件保存到磁盘?

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

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

事实上,如果在 tmux 中执行此操作,您可能不需要在后台 运行 的脚本,因为两个受影响的应用程序(Vim 和 IPython)将不阻塞,tmux 是否阻塞也没有关系。所以你可以把 -b 去掉。

Enter 和 select-窗格,否则 Vim 写入文件和 IPython 读取文件之间将存在竞争。

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