我怎样才能写一个文本文件,然后在同一个 Bash 脚本中读取它?
How can I write a text file, and then read from it in the same Bash script?
我在 Vim 中有一个热键,可以让我进入命令模式并调用 Bash 脚本。 Bash 脚本尝试以下步骤:
- Select 两个标记之间的文本
- 将选定的文本块发送到 .py 文件
- 将 .py 文件加载到 IPython
如果我手动输入所有内容,脚本可以正常工作,但如果我 运行 脚本,文本块在脚本完成后才会另存为文件,导致 [=40] 时出错=] 尝试稍后在脚本中加载文件。
以下是我尝试过的步骤:
- 如果我的文件被保存在缓冲区中,我尝试了 syncing and flushing
- 如果文件需要更多时间来写入,我尝试了sleep and wait
- 我还尝试 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.
我在 Vim 中有一个热键,可以让我进入命令模式并调用 Bash 脚本。 Bash 脚本尝试以下步骤:
- Select 两个标记之间的文本
- 将选定的文本块发送到 .py 文件
- 将 .py 文件加载到 IPython
如果我手动输入所有内容,脚本可以正常工作,但如果我 运行 脚本,文本块在脚本完成后才会另存为文件,导致 [=40] 时出错=] 尝试稍后在脚本中加载文件。
以下是我尝试过的步骤:
- 如果我的文件被保存在缓冲区中,我尝试了 syncing and flushing
- 如果文件需要更多时间来写入,我尝试了sleep and wait
- 我还尝试 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.