将 MacOS 上的手册页传送到编辑器中

Sea*_*mus 6 osx man editors pipe io-redirection

使用bash在Mac OS编辑一些man为我所用的网页。

在 Mac OS 中,该命令open -t filename将在系统的默认文本编辑器中打开指定的文件。

$ man somepage | col -b
Run Code Online (Sandbox Code Playgroud)

将正确呈现指定man页面。我想要做的是在文本编辑器中打开呈现的手册页。我可以按如下方式完成此操作:

man somepage | col -b > filename && open -t filename
Run Code Online (Sandbox Code Playgroud)

我可能应该对此感到满意,但我在我的脑海中意识到必须有一种“更好的方法”来仅使用管道和重定向来做到这一点。此外,上面的命令倾向于用我可能不需要保留的文件“乱扔”我的文件系统 - 因此需要另一个步骤来删除 cruft。理想情况下,我可以在没有文件名或每次调用时覆盖的通用文件名的情况下在编辑器中打开呈现的手册页。我已经花了大约一个小时来解决这个问题,尝试不同的事情,但无济于事。

对我来说最有意义的是:

$ open -t < man somepage | col -b
Run Code Online (Sandbox Code Playgroud)

或这个:

$ open -t &1 < man somepage | col -b
Run Code Online (Sandbox Code Playgroud)

但当然这不起作用,因为外壳将其man作为文件名。我什至接近做对了吗?我愚蠢的尝试吗?

fil*_*den 6

你可以通过open-f标志有它从标准输入读取内容,并在文本编辑器,这使得它在管道中的可使用打开它们。

所以这样的事情应该做你想做的:

man somepage | col -b | open -tf
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • 我要补充一点,Seamus 正在跳舞的东西是 [进程替换](https://www.gnu.org/software/bash/manual/bashref.html#Process-Substitution) `open -t &lt;(man somepage | col -b)`,但由于 `open` 和 TextEdit 的行为方式,这实际上不起作用。 (3认同)
  • @Seamus 在 Filipe 所说的基础上,“open”实际上并没有像孩子一样启动程序,它要求操作系统生成它并终止。两个进程之间没有关系来保留文件描述符;一旦 `open` 终止,管道也会终止,任何东西都没有机会首先看到内容。TextEdit 只接受常规文件,但即使您有一个对文件名满意的不同默认编辑器,它仍然无济于事,因为它永远不会有机会使用它。 (2认同)