shellcheck 报告:
echo -e "blah/blah\n$(cat "$tmpdir"/"$filename".jpdf)" > "$tmpdir"/"$filename".jpdf
^-- SC2094: Make sure not to read and write the same file in the same pipeline.
^-- SC2094: Make sure not to read and write the same file in the same pipeline.
Run Code Online (Sandbox Code Playgroud)
blah/blah
该命令的目的是在文件的开头插入一行"$tmpdir"/"$filename".jpdf
。
“确保不在同一管道中读取和写入同一文件”是什么意思?
我该怎么办呢?
谢谢。
正如其他答案所指出的,它警告您读取和写入同一文件将擦除该文件。原因是>
导致文件在输入完成之前被截断。
你有两个选择,
sponge
从包装中取出使用moreutils
。sponge
确保输入在通过管道传送到下一个命令之前被完全消耗。
代替
command "$file" > "$file"
Run Code Online (Sandbox Code Playgroud)
做
command "$file" | sponge "$file"
Run Code Online (Sandbox Code Playgroud)将输出重定向到另一个文件,然后重命名。
像这样
command "$file" > "$file2" && mv "$file2" "$file"
Run Code Online (Sandbox Code Playgroud)关于您的具体问题:在文件中添加“blah/blah”,sed
如果它支持该-i
选项,则可以使用。举GNU
sed
个例子:
sed '1i\
blah/blah' -i "$file"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2955 次 |
最近记录: |