bash:在输出到文件后立即使用文件作为下一个命令的输入是否安全?

bash:在输出到文件后立即使用文件作为下一个命令的输入是否安全?

如果我输出到文件

somecommand > somefile

可以somefile作为输入参数传递给下一行的命令吗?它是否总是仅在文件完全写入后才执行,还是我需要做一些事情来确保这是安全的?

答案1

是的,如果上一个命令已经结束,那么在下一个命令中使用它是安全的。如果您一个接一个地使用命令,并且所有命令都在前台运行(除非您专门这样做,否则确实如此),您可以相信您的系统会处理其余的事情。即使文件没有真正写入磁盘并且仍然驻留在缓存中,您的操作系统也会为您透明地处理这种情况。

只是说一句:在某些情况下,您甚至可以不使用文件作为某些中间结果的位置,效果会更好。如果程序输出的唯一用途是提供下一个程序,您可以使用管道:

dmesg | grep eth0 | less

答案2

您可以安全地读取关闭的文件

您可以安全地执行此操作:

somecommand > somefile
sort somefile

没有任何问题。但是,如果没有中间步骤或实用程序,您通常无法从正在写入的同一文件中读取数据。例如:

echo foo >  words
echo bar >> words

# This will clobber the file you're
# reading from. Don't do it!
sort < words > words

当您需要读取和写入同一个文件时

有很多方法可以满足这一常见需求。例如,海绵moreutils 包中的实用程序将允许您安全地执行此操作:

echo foo >  words
echo bar >> words

# sponge is like tee, but soaks up all the input
# from the pipe before writing to your output file
sort words | sponge words

# your words are now sorted:
#   bar
#   foo
cat words

相关内容