고양이 리디렉션


11

라는 파일 abc이 현재 디렉토리에 있고 텍스트가 있다고 가정하십시오. 명령을 실행할 때 :

cat abc > abc

파일 내용이 왜 abc사라 집니까?
명령이 왜 텍스트를 삭제하고 파일이 빈 파일이됩니까?



10
레이저 포인터 에 대한 매우 효과적인 도구입니다 고양이 리디렉션. </ pun>
WBT

내 고양이는 방향 전환에 매우 열악하게 반응합니다 ...
Ex Umbris

이 문제를 피하기 위해, dog 라고하는 작은 셸 스크립트를 사용합니다 .cat abc | dog abc
joeytwiddle

화면의 출력이 마음에 들지 않으면 다른 옵션을 사용하는 것 tee입니다.
Andrea Lazzarotto

답변:


27

순서가 다르기 때문에

할 때 :

cat abc > abc

>출력 리디렉션 연산자입니다. 셸에서이 O_TRUNC플래그를 볼 때 open(2)ie 플래그를 사용하여 잘림 모드에서 파일을 열면 파일에 open("abc", O_TRUNC)있던 모든 것이 사라집니다. 이 리디렉션은 cat명령이 실행 되기 전에 셸에서 먼저 수행됩니다.

따라서 명령이 cat abc실행될 때 파일 abc이 이미 잘렸으므로 cat파일이 비어 있습니다.


1
cat abc >> abc는 어떻습니까? 그러면 어떻게됩니까?
Tulsi Kanodia

2
@TulsiKanodia-무한 루프가 발생합니다. 고양이가 줄을 읽을 때마다 다음 줄로 넘어 가기 전에 다른 줄을 추가합니다.
user3490

3
이것은 감지되어 방지됩니다. 대신, 텍스트 cat: filename: input file is output file( filename선택한 파일 이름이 있음)가 이전 stdout에 인쇄됩니다.
UTF-8 8

@TulsiKanodia unix.stackexchange.com/questions/154903/why-does-cat-xx-loop 참조
Gilles 'SO-stop

5

@ heemayl 's answer에 추가하여 , 코드가 발생하는 순서에 대해 더 명확하게하려면 명령 시작시 간단히 모든 방향 재 지정을 넣을 수 있습니다.

> abc cat abc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.