创建临时文件并编辑内容,然后返回文件的路径



我希望使用mktemp创建一个临时文件,然后在创建后编辑它的内容(使用您喜欢的编辑器;我使用了micro(,然后在完成时,即保存/退出进程时,它应该将文件的路径输出到stdout/pipe/replace-inplace作为参数。

我只能打印创建和使用的文件的路径。我不想依赖编辑器在关闭时输出路径的能力,这样任何编辑器都可以使用。

我在尝试什么。

# creates a file. passes it's path to editor to open it. 
# then we can make changes and save. finally quit.
> micro (mktemp)

但是输出什么都不是,我希望它是传入的原始路径。我该怎么做?

这些是示例用例,它们不起作用,因为保存后我无法输出路径。

# e.g. a full test case; create tmp file, fill it, read it, find it...
> micro (mktemp) | cat | grep 'find me*!'
# or you want to count the words
> micro (mktemp) | tail | wc 
# another way it should work as well! i.e. pros-sub
> cat (micro (mktemp)) | sed 's/red/green/g'
# bonus points (I mean it, 50 extra karma). You might need to restructure the chain
# i.e. ->create tmp, fill it, save it, read it, manipulate it, save it 
# back to disk (append/replace)
> cat (micro (mktemp)) | sed ' s/red/green/g' >> <original_file_path>

我在fish工作,因为我乐观,正在寻找解决方案。然而,如果你已经在bash中了解它,我很想看到它,它可能很有用。所以我会标记两个

在鱼壳中,您可以定义一个函数,这里是mt:

function mt
set -l path (mktemp)
micro $path </dev/tty >/dev/tty
cat $path
end

现在您的管道可以使用mt:

mt | wc

这里有一个bash解决方案。

将路径名放入变量中,以便稍后在脚本中重用它。

要获得命令的输出,可以使用$(command),而不仅仅是(command)

temp=$(mktemp)
micro "$temp"
wc < "$temp"

最新更新