Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在一个管道中重写bash中的文件_Bash_Pipe_Cat - Fatal编程技术网

在一个管道中重写bash中的文件

在一个管道中重写bash中的文件,bash,pipe,cat,Bash,Pipe,Cat,cat file1 | cat>file1的结果为空file1 headfile1 | cat>file1的结果也是空file1 当然,一个真正的管道应该有更多的步骤——内部的工具和操作 有没有办法保存转换后的阅读内容 真正的情况是source.env和&cat file1 | envsubst>file1唯一的选项是(head file1 | cat>tmp_文件)和&mv tmp_文件file1。换句话说,您必须写入临时文件,然后用临时文件替换原始文件 基本上,bash必须在开始执行管道中的

cat file1 | cat>file1
的结果为空file1

headfile1 | cat>file1
的结果也是空file1

当然,一个真正的管道应该有更多的步骤——内部的工具和操作

有没有办法保存转换后的阅读内容


真正的情况是
source.env和&cat file1 | envsubst>file1
唯一的选项是
(head file1 | cat>tmp_文件)和&mv tmp_文件file1
。换句话说,您必须写入临时文件,然后用临时文件替换原始文件


基本上,bash必须在开始执行管道中的每个阶段之前打开所有文件和管道。一旦它打开了你的输出文件进行覆盖,它就被覆盖了。

海绵帮你做这件事。不过,您需要单独安装,因为它通常不包含在操作系统中

cat test | sponge | cat > test
将给您留下最初在文件“test”中的内容


要在Ubuntu或Redhat中使用海绵,您需要安装软件包
moreutils

谢谢,但正确答案是:

cat文件1|envsubst|海绵文件1

这(来自吠陀)是海绵的错误用法


cat file1 | envsubst |海绵| cat>file1

不要写入您正在读取的同一个文件。根据您正在进行的实际转换,可能存在这种可能性,但这取决于您使用的工具。有了
cat
head
,你别无选择。使用额外的软件你就有机会了。尝试使用海绵(
moreutils
)。但一般规则是有效的:避免写入正在读取的同一个文件。阅读此伟大的链接:这也可能导致一个空文件。由于重定向,仍然存在争用条件。正确使用
海绵
cat测试…|海绵测试