고려하면이 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
.
이야기의 교훈:이렇게 하지 마세요. 대신 두 개의 파일을 사용하세요.