如果我输出到文件
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