쉘 명령에서 ">"와 ">>"의 차이점은 무엇입니까?


답변:


48

>파일 을 덮어 쓰는 데 사용되며 ( " clobber ") 파일 >>에 추가하는 데 사용됩니다.

따라서를 사용할 때 ps aux > file의 출력 ps aux이 기록되고 file이름 file이 지정된 파일 이 이미 존재하면 해당 내용을 덮어 씁니다.

그리고를 사용 ps aux >> file하면의 출력 ps aux이 쓰여지고 file이름 file이 지정된 파일 이 이미 존재하면 파일에는 이전 내용과의 이전 내용 ps aux뒤에 작성된 내용이 포함 file됩니다.


11

터미널에 쓰면

ps aux > log

ps aux이름이 file 인 로그에 출력을 넣습니다 .

당신이 넣어 경우

ps aux >> log

다음 출력은 첫 번째 출력 아래에 추가됩니다. 하나만 넣으면 >이전 파일을 덮어 씁니다.


4

>>, 추가 >항상 덮어 쓰기 / 파괴 이전의 내용을.

ps -aux > log

와 같다

rm log 2>/dev/null
ps -aux >> log

윈텔에 그것은 동일합니다 .bat, .cmd그리고 .ps1스크립트도; 공통 유산, 상식.


3

가장 중요한 차이점은 >셸에서 O_WRONLY|O_CREAT|O_TRUNC플래그를 사용 하여 파일 또는 파일과 유사한 객체를 열도록하는 것입니다. 파일이 있으면 파일이 만들어 지거나 잘리는 반면 플래그 >>가있는 파일 을 여는 경우 O_WRONLY|O_CREAT|O_APPEND파일이 있으면 파일이 만들어 지거나 추가됩니다. 시스템 호출을 추적하는 경우 (예 :

$ strace -e open,dup2 bash -c 'true >> /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
dup2(3, 1)                              = 1
dup2(10, 1)                             = 1

그리고

$ strace -e open,dup2 bash -c 'true > /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1)                              = 1
dup2(10, 1)                             = 1
+++ exited with 0 +++

두 경우 모두 열린 파일의 파일 디스크립터는 명령의 파일 디스크립터 1 (stdout)에 복제되며 쉘 포크가 실행하는 모든 명령에 의해 상속됩니다.

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