리디렉션 관련 셸의 실행 순서가 내 시스템에서 약 1000번 중단되는 이유는 무엇입니까?

리디렉션 관련 셸의 실행 순서가 내 시스템에서 약 1000번 중단되는 이유는 무엇입니까?

고려하면이 Q&A리디렉션과 관련된 셸의 실행 순서와 관련하여 파일이 존재하지 않으면 cat example.txt | shuf > example.txt파일이 존재하지 않는다고 불평하지 않도록 먼저 생성된다는 사실에도 불구하고 이것은 단지 내 이해에 따른 확인입니다. 내 시스템에서 약 1,000번마다 한 번씩 발생하는 일입니다(백업에는 각 행에 15개의 정적 값이 포함되어 있습니다).

for i in $(seq 1 1000); do
    cp backup test
    echo $i
    cat test | shuf > test
    cat test
done

그런 것 같은데, 어떻게 예외가 있을 수 있겠습니까?규칙?

답변1

여기:

cat test | shuf > test

>우선순위는 다음을 의미합니다.

(cat test) | (shuf > test) 

아니다:

(cat test | shuf) > test

두 개의 서로 다른 파일을 사용하더라도 두 그룹 간에는 아무런 차이가 없습니다.

동일한 파일로 작업할 때 중요한 것은 파이프 양쪽에 있는 두 명령입니다.동시 실행. 이러한 명령은 cat test및 입니다 shuf > test. >"쓰기 및 자르기를 위해 열림"을 의미하고 cat"읽기를 위해 열림"은 읽고 닫힘을 의미합니다. 이 두 가지 일이 일어나고 있기 때문에동시에, 그들의 집단적 운영 순서 사이의 관계는 다음과 같습니다.무기한. 쉘이 파일 잘림을 관리하기 전에 cat파일을 얻을 수 있습니다. shuf > test그러나 더 많은 요인이 관련되어 있기 때문에 이것은 작은 기회입니다. cat매우 운이 좋은 상황에서만 발생합니다 .스케줄링shuf > test.

이야기의 교훈:이렇게 하지 마세요. 대신 두 개의 파일을 사용하세요.

관련 정보