cat file1 | cat > file1
的结果是空文件1。
head file1 | cat > file1
的结果也是空文件1。
当然,真正的管道旨在具有更多的步骤-内部的工具和操作。
有什么方法可以保存转换后的阅读内容?
实际情况是source .env && cat file1 | envsubst > file1
答案 0 :(得分:0)
唯一的选择是类似(head file1 | cat > tmp_file) && mv tmp_file file1
。换句话说,您必须写入一个临时文件,然后然后用该临时文件替换原始文件。
从根本上讲,bash必须先打开所有文件和管道,然后才开始exec
进入管道中的每个阶段。打开您的输出文件以进行覆盖后,它就会被覆盖。
答案 1 :(得分:0)
谢谢,但正确答案是:
cat file1 | envsubst | sponge file1
(来自Veda的)这是海绵的错误用法
cat file1 | envsubst | sponge | cat > file1
答案 2 :(得分:-1)
海绵帮您做到这一点。不过,您需要单独安装它,它通常不包含在操作系统中。
cat test | sponge | cat > test
将保留原始文件“ test”中的内容。
要在Ubuntu或Redhat中使用海绵,您需要安装软件包moreutils
。