2011. 4. 28. 11:11 Program.../Develop Story
윈도우즈 -> 유닉스 파일 이동시 ^M 처리
윈도우즈에서 파일을 에디팅후 유닉스로 옮길 경우 ^M 때문에 에러가 발생하는 경우가 있다.
특히나 sh 프로그램에서 변수값 입력후 뒤에 ^M이 붙어 에러가 발생한다.
예를들자면
test.sh 이 있다.
이 쉘의 내용은 java -classpath /test/test.jar: Test 20110428 이라고 한다면
이것을 윈도우에서 에디팅 해서 유닉스에 넣어 vi 에디터로 볼경우
java -classpath /test/test.jar: Test 20110428^M 이렇게 나온다
그래서 변수값이 20110427^M으로 되여 문제가 발생한다.
이를 해결하는 방법은
1. sh을 에디팅할때 유닉스 vi로 첨부터 에디팅 한다.
2. 부득이하게 윈도우에서 했을 경우엔 vi test.sh 을 한후 :s /^M//g 라고 치면 ^M이 전부 공백으로 바뀐다.
- :s 는 vi의 search 명령이다.
- /a/b 는 a를 b로 바꾸라는건데 여기선 /^M/ 하였으니 ^M을 공백으로 바꾸라는 의미다
- /g는 글로벌 옵션이다 sh 프로그램 전체를 뒤져서 전부 바꾸라는 의미가 된다.
- 여기서 ^M은 키보드에 있는 ^와 M이 아니라 ctrl+v+m 이다. ^ 모양은 유닉스에서 ctrl+v 로 만들어 준다.
특히나 sh 프로그램에서 변수값 입력후 뒤에 ^M이 붙어 에러가 발생한다.
예를들자면
test.sh 이 있다.
이 쉘의 내용은 java -classpath /test/test.jar: Test 20110428 이라고 한다면
이것을 윈도우에서 에디팅 해서 유닉스에 넣어 vi 에디터로 볼경우
java -classpath /test/test.jar: Test 20110428^M 이렇게 나온다
그래서 변수값이 20110427^M으로 되여 문제가 발생한다.
이를 해결하는 방법은
1. sh을 에디팅할때 유닉스 vi로 첨부터 에디팅 한다.
2. 부득이하게 윈도우에서 했을 경우엔 vi test.sh 을 한후 :s /^M//g 라고 치면 ^M이 전부 공백으로 바뀐다.
- :s 는 vi의 search 명령이다.
- /a/b 는 a를 b로 바꾸라는건데 여기선 /^M/ 하였으니 ^M을 공백으로 바꾸라는 의미다
- /g는 글로벌 옵션이다 sh 프로그램 전체를 뒤져서 전부 바꾸라는 의미가 된다.
- 여기서 ^M은 키보드에 있는 ^와 M이 아니라 ctrl+v+m 이다. ^ 모양은 유닉스에서 ctrl+v 로 만들어 준다.
'Program... > Develop Story' 카테고리의 다른 글
윈도우에서 dll or ocx 파일 레지스트리 등록 및 삭제 (0) | 2010.09.01 |
---|