bash - 如何编写文本文件,然后在同一个 Bash 脚本中读取它?
问题描述
我在 Vim 中有一个热键,可以让我进入命令模式并调用 Bash 脚本。Bash 脚本尝试执行以下步骤:
- 选择两个标记之间的文本
- 将选定的文本块发送到 .py 文件
- 将 .py 文件加载到IPython
如果我手动输入所有内容,该脚本就可以工作,但如果我运行该脚本,则文本块在脚本完成之前不会保存为文件,当 IPython 稍后尝试在脚本中加载文件时会导致错误。
以下是我尝试过的步骤:
- 如果我的文件被保存在缓冲区中,我尝试同步和刷新
- 如果文件需要更多时间来写入,我尝试睡眠并等待
- 我还尝试了异步 shell 命令来查看 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
。
您仍然几乎肯定需要在和选择窗格之间休眠一秒或半秒(“休眠 1”或“休眠 0.5”,实验),Enter否则在 Vim 写入文件和 IPython 读取文件之间会出现竞争.
推荐阅读
- python - 如何强制菜单在窗口中而不是 OSX 默认的 Tkinter
- laravel - 在 null 上调用成员函数 hasVerifiedEmail()
- javascript - 所需数量之间的转换
- marklogic - 已解析的查询在 ML9 中不包含 qtextpre
- java - CodeChef 问题 NUKES 上的超时和 NZEC
- macos - ./vcpkg 安装权限被拒绝
- python - 将多行 url 请求转换为 Python 中的函数
- android - 设置安卓模拟器相机分辨率
- python - 有没有办法将环境变量传递给python脚本?
- javascript - 一段时间后,D3js 碰撞停止工作