linux - 如何将输入管道输入到 linux 上的 sublimetext?

标签 linux bash pipe stdin sublimetext

如何从 stdin 接收文本到 sublimetext 编辑器?在 vim 中它是这样工作的:

echo "potato potato potato" | vim -

同样的事情也适用于 gedit,创建一个包含内容的新文档。

Sublimetext 似乎刚刚开始在新选项卡中编辑一个名为“-”的文件,是否有其他一些 shell 技巧可以工作?

最佳答案

假设 Sublime 仍然不支持打开 STDIN,一个直接的解决方案是将输出转储到一个临时文件,在 sublime 中打开该文件,然后删除该文件。假设您在 bin 目录中创建了一个名为 tosubl 的脚本,如下所示:

#!/bin/bash

TMPDIR=${TMPDIR:-/tmp}  # default to /tmp if TMPDIR isn't set
F=$(mktemp $TMPDIR/tosubl-XXXXXXXX)
cat >| $F  # use >| instead of > if you set noclobber in bash
subl $F
sleep .3  # give subl a little time to open the file
rm -f $F  # file will be deleted as soon as subl closes it

然后你可以通过做这样的事情来使用它:

$ ps | tosubl

但更有效和可靠的解决方案是使用 Process Substitution如果你的 shell 支持它(它可能支持)。这消除了临时文件。这是 bash:

tosubl() {
    subl <(cat)
}

echo "foo" | tosubl

我很确定您可以以某种方式删除该函数中 cat 的使用,因为它会将位从 stdin 冗余地铲到 stdout,但我不知道在该上下文中这样做的语法此刻。

关于linux - 如何将输入管道输入到 linux 上的 sublimetext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21125094/

相关文章:

java - 在后台安全地长时间运行 java 进程

bash - 如何在状态栏中显示 tmux 环境变量(作为窗口格式)

c++ - 简单的匿名管道 - 你使用什么包装器模型? (WinAPI, C++)

python - 用python的子进程同时捕获并输出stderr

linux - 使用 Linux shell 脚本用给定文本替换字符串

linux - Bash如何对两个目录中的文件执行命令

linux - 在for循环中使用 'tar'命令

ansible - 如何使用 Ansible 管道命令?例如curl -sL host.com |须藤重击 -

r - 虚拟机上带有 Rstudio 的 mxnet 包

bash - 使用 xargs 作为 cut 的参数