如何从标准input接收文本到sublimetext编辑器? 用vim就可以这样工作:
echo "potato potato potato" | vim -
同样的事情与gedit一起工作,创build一个新的文件的内容。
Sublimetext似乎刚开始编辑一个名为“ – ”的文件在一个新的选项卡中,是否有一些其他的shell技巧可以工作?
如果您的崇高安装不支持打开STDIN(例如Linux上的当前版本),最简单的解决方案是将输出转储到临时文件,以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
那么你可以通过做这样的事情来使用它:
$ ifconfig | tosubl
我不知道崇高的文本,但你的问题应该是通用的,它适用于任何接受文件名作为参数的程序,但拒绝从标准输入读取。
幸运的是,Bash允许您将stdout从一个进程管理到某种临时文件,然后将该文件的名称传递给另一个进程。
从man bash
:
在支持命名管道(FIFOs)的系统或命名打开文件的/ dev / fd方法上支持进程替换。 它采用<(list)或>(list)的形式。 进程列表在其输入或输出连接到FIFO或/ dev / fd中的某个文件时运行。 作为扩展的结果,此文件的名称作为参数传递给当前命令。 如果使用>(列表)表单,写入文件将为列表提供输入。 如果使用<(list)形式,则应读取作为参数传递的文件以获取列表的输出。
假设SomeProcess产生你想在你的编辑器中捕获的输出:
sublimetext <(SomeProcess)
要么:
SomeProcess | sublimetext <(cat)
如果你认为你会手工输入这个内容,那么你可能需要将sublimetext <(cat)
放入shell脚本或别名中。
以防万一你的操作系统不支持进程替换,那么你总是可以自己指定一个临时文件:
SomeProcess > /tmp/myoutput sublimetext /tmp/myoutput
你可能会发现从moreutils vipe
有用。 如果你已经设置了 EDITOR='subl --wait'
,你可以简单地:
echo 'potato potato potato' | vipe