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

관련 정보