2012-01-12 4 views
2

나는 그들을 제거하는 방법에 대해 많은 질문을하지만 유닉스 시스템과 터미널에서 모든 테스트/인쇄 기능을 "엉망으로 만드는"이유에 대한 답을 찾지 못했습니다.유닉스에서 캐리지 리턴을 출력하는 기본 동작은 무엇입니까?

그래서 프로그래머의 관점에서 보면 캐리지 리턴이 유닉스 쉘을 망쳐 버리는 이유는 무엇입니까?

편집 : 가능합니다. 나는 호언 장담하는 것을 의미하지는 않지만 캐리지 리턴이 재미있는 결과를 가져 오는 원인이 무엇인지 궁금합니다.

예 : \r\n으로 모든 메시지를 끝내는 시스템에서 메시지를 가져 오는 중입니다. 그렇다면 C에서 message[length - 2] = '\0'; 또는 펄에서 $str =~ s/\r//g과 같은 것을해야합니다.

편집 2 : Unix 시스템에서 캐리지 리턴 인쇄의 기본 동작은 무엇입니까? 문제를 일으키는 것으로 보이며 일반적으로 제거해야합니다.

+0

"수정"하는 데 사용하는 코드로 구체적인 예를 제공 할 수 있습니까? 그리고 그 코드에 대해 물어보십시오. 이것은 질문보다 더 많은 호언 장담처럼 보입니다. – David

답변

3

유닉스 시스템에서는 불필요하고 환영받지 못하기 때문에.

stty 설정도 확인해야합니다. 입력 및 출력에서 ​​NL/CR 매핑을 처리하는 옵션이 있습니다. 리눅스 박스에서 stty -a는 말했다 :

speed 9600 baud; rows 65; columns 120; line = 0; 
intr = ^C; quit = ^\; erase = ^?; kill = ^X; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; 
stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; 
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr 
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8 
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke 

-ocrnl, onlcr, -onocr, -onlret, -inlcr, 특히 -igncr, -icrnl.

그들을 망쳐 놓는 것에주의하십시오. 당신이 당신의 현재 제정신 터미널 설정을 유지하는 경우 당신은 그들과 함께 실험을 할 수 있습니다

saved_tty_settings=$(stty -g) 

...tinker with the settings here... 

stty $saved_tty_settings 

하나의 문제가 수익이 더 이상 단말기에 전송, 그래서 당신이 일을 해결 없음을 수 있습니다. 이 경우 Control-Jstty $saved_tty_settingsControl-J을 입력 해보십시오. 첫 번째 컨트롤 - J는 이전에 어떤 명령이 있었는지 플러시 (또는 아무것도하지 않음)합니다. 나머지는 stty 재설정 작업을 실행합니다. 나는 내가해야한다면 사용할 수있는 선호하는 tty 설정의 기록을 가지고있는 sane이라는 스크립트를 가지고있다. 나는 지난 10 년 간 자주 사용하지 않았지만, tty 설정 중 일부를 사용하지 않았습니다.

위험한 명령 (rm 그 외)을 사용하는 것에 매우주의하십시오. 따옴표를 사용해도 문제가 발생할 수 있습니다 (입력 내용을 볼 수없고 추적 할 수없고 줄 편집을 비활성화 한 경우 등).). 그래서, 당신은 놀 수 있습니다. 조심해.

+0

정말 감사합니다. 감사합니다. – Nate

2

다른 줄 조합을 해석하여 줄의 끝을 나타내는 다른 시스템 때문입니다. Windows는 \r\n을 사용하고 유닉스는 \n을 사용했으며 Mac은 한 번에 \r을 사용했습니다. 이제 Windows에서 Unx에서 텍스트 파일을 만들면 \r\n 앞에 나오고 그 파일을 제거해야합니다.

이 형식 변환을 처리하는 dos2unix이라는 멋진 유틸리티가 있습니다.

관련 문제