rm -rf 하면 -f 옵션 때문에 에러가 발생하지 않습니다. 에러 메시지가 안 나옵니다.
rm -rf test.txt >/dev/null 는 표준출력을 /dev/null 로 보내라는 것. 아무것도 안나옵니다.
2>&1 은 표준 에러(2)를 표준 출력(1)으로 보내라는 것입니다.
rm -rf test.txt 2>/dev/null 은 표준 에러(2)를 /dev/null 보내라는 것. 아무것도 안나옵니다.
의미는 차이가 있지만, 결과는 아무것도 안나오므로 똑같습니다.
hodong@:/usr/home/hodong $ dd if=./sample.s of=/dev/null
2+1 records in
2+1 records out
1033 bytes transferred in 0.000070 secs (14732308 bytes/sec)
hodong@:/usr/home/hodong $ dd if=./sample.s of=/dev/null 2> /dev/null
hodong@:/usr/home/hodong $ dd if=./sample.s of=/dev/null 1> /dev/null
2+1 records in
2+1 records out
1033 bytes transferred in 0.000074 secs (13914707 bytes/sec)
hodong@:/usr/home/hodong $ echo $?
0
hodong@:/usr/home/hodong $ ls aaaaaaaaaa
ls: aaaaaaaaaa: No such file or directory
hodong@:/usr/home/hodong $ echo $?
1
hodong@:/usr/home/hodong $ rm -f aa
hodong@:/usr/home/hodong $ echo $?
0
hodong@:/usr/home/hodong $ rm aa
rm: aa: No such file or directory
hodong@:/usr/home/hodong $ echo $?
1
dd 성공하면 0 나오는게 맞아요.
어플 작성할 때,
int main (int argc,char**argv){if(1)/* success */return0;else/* failure */return1;}
보통 이렇게 작성합니다.
일반적으로 어플은 성공하면 0 을 리턴합니다.
실패하면, 1, -1, -128 등... 0 이 아닌 값을 리턴합니다.
실패시 리턴값은 개발자가 임의로 정해서 에러 코드로 활용할 수 있습니다, 단, 어플이 관례적으로 실패할 경우 0 을 리턴하도록 개발하지는 않습니다.
standard out, standard error 로 출력되는 메시지들을 모두 /dev/null 로 redirection 하라는 표현입니다. 위의 3개의 redirection 은 동일한 동작을 합니다.
rm-rf test.txt 2>/dev/null
위의 redirection 은 standard error 로 출력되는 메시지를 /dev/null 로 변경하라는 의미입니다.
rm의 -f 명령은 non-interactive 하게 진행을 하므로 standard out 으로의 출력이 없기 때문에 " > /dev/null 2>&1" 과 동일한 결과를 보여주는 것이지, 동일한 동작을 하는 것은 아닙니다.
rm -rf 하면 -f 옵션 때문에 에러가 발생하지
rm -rf 하면 -f 옵션 때문에 에러가 발생하지 않습니다. 에러 메시지가 안 나옵니다.
rm -rf test.txt >/dev/null 는 표준출력을 /dev/null 로 보내라는 것. 아무것도 안나옵니다.
2>&1 은 표준 에러(2)를 표준 출력(1)으로 보내라는 것입니다.
rm -rf test.txt 2>/dev/null 은 표준 에러(2)를 /dev/null 보내라는 것. 아무것도 안나옵니다.
의미는 차이가 있지만, 결과는 아무것도 안나오므로 똑같습니다.
답변 감사드립니다. 근데 하나더 궁금한게 있는데요
dd if=/dev/zero of=test.txt count=100 bs=1024 2>/dev/null 이라는 명령어를 입력하면 콘솔에 아무것도 안나오게되는데요, 2>/dev/null없이 입력하면 몇바이트가 복사됬다라는식의 출력이 나오게되는데 그럼 이출력이 표준에러인건가요?? 근데 echo $?하면 0으로나오거든요..
dd 가 출력을 표준에러(stderr) 에 하는거
dd 가 출력을 표준에러(stderr) 에 하는거 같네요.
dd 성공하면 0 나오는게 맞아요.
어플 작성할 때,
보통 이렇게 작성합니다.
일반적으로 어플은 성공하면 0 을 리턴합니다.
실패하면, 1, -1, -128 등... 0 이 아닌 값을 리턴합니다.
실패시 리턴값은 개발자가 임의로 정해서 에러 코드로 활용할 수 있습니다, 단, 어플이 관례적으로 실패할 경우 0 을 리턴하도록 개발하지는 않습니다.
"단, 어플이 관례적으로 실패할 경우 0 을
"단, 어플이 관례적으로 실패할 경우 0 을 리턴하도록 개발하지는 않습니다." 표현이 좀 이상한데,,,
"단, 관례적으로, 개발자가 main() 함수 리턴값에, 어플이 실패할 경우 0 을 리턴시키지 않습니다."로 정정합니다. 성공할 경우, 0 을 리턴하도록 main() 함수에 return 0; 하죠. 관례입니다.
아하..그렇군요,,,
덕분에 잘 이해가 됬습니다. 감사합니다
stdlib.h (혹은 cstdlib) 에 EXIT
stdlib.h (혹은 cstdlib) 에 EXIT_SUCCESSS, EXIT_FAILURE 가 define 되어 있습니다.
질문한 두 redirection 은 차이가 있습니다.
질문한 두 redirection 은 차이가 있습니다. 다만 결과가 동일할 뿐인거죠.
standard out, standard error 로 출력되는 메시지들을 모두 /dev/null 로 redirection 하라는 표현입니다. 위의 3개의 redirection 은 동일한 동작을 합니다.
위의 redirection 은 standard error 로 출력되는 메시지를 /dev/null 로 변경하라는 의미입니다.
rm의 -f 명령은 non-interactive 하게 진행을 하므로 standard out 으로의 출력이 없기 때문에 " > /dev/null 2>&1" 과 동일한 결과를 보여주는 것이지, 동일한 동작을 하는 것은 아닙니다.
차이를 알고 싶다면 다음과 같이 실행해 보시면 차이가 확 나옵니다.
이 2개의 명령은 전혀 다른 결과를 출력 합니다.
댓글 달기