쉘 스크립트 "ls >-" 하면 생기는 파일에 대해서 질문드려요
글쓴이: sheep9121 / 작성시간: 화, 2020/05/05 - 8:31오전
ls >-
를 하면 -라는 파일이 생기는걸 발견했습니다.
쉘 그래머 설명해놓은 문서에는, ">-" 는 왼쪽에 오는 파일디스크립터를 클로즈 한다. 파일디스크립터를 명시하지 않으면 stdout으로 한다고 하는데요.
예상대로 ls커맨드의 결과는 출력되지 않았습니다만, 현재 디렉토리에"-"라는 이상한 파일이 하나 생겨있고, 그 파일은, 사이즈가 0이 아님에도 cat 이나
vim으로 열어보면 보통 파일들과는 조금 다르게 작동하는것을 볼 수 있었습니다.
이 파일의 정체가 뭔가요?? 읽어주셔서 감사합니다
Forums:
ls > filename 하면 ls 명령으로 출력된게
ls > filename 하면 ls 명령으로 출력된게 filename 에 저장됩니다. - 라는 파일 이름으로 파일이 생성된거죠. 그거 삭제하려면 애먹습니다. 파일 탐색기 열어서 GUI 환경에서 마우스로 삭제하세요.
그리고 - | 는 특별한 의미가 있습니다. 시간관계로 추후 설명하겠습니다.
파일 디스크립터는 숫자일 경우만 가능하고, 숫자가
파일 디스크립터는 숫자일 경우만 가능하고, 숫자가 아닐 경우에는 파일로 취급 됩니다.
그러므로, ls >- 라고 파면 ls 의 결과는 - 라는 파일에 저장이 되게 됩니다.
그리고, - 라는 파일을 제어를 하려면 gnu getopt 를 사용하는 프로그램에서는 -- 를 이용하여 - 가 옵션 표시가 아님을 명시해 줘야 합니다.
즉,
이렇게 해 주어야 "-" 파일의 내용을 출력할 수 있습니다. 삭제 역시
로 해주어야 합니다. gnu getopt 에서는 - 다음에 문자가 있으면 옵션으로 취급을 하는데, 명령행에 -- 가 오면 이 조건을 무시하게 하는 것입니다.
>>>
>>>
gnu getopt 에서는 - 다음에 문자가 있으면 옵션으로 취급을 하는데, 명령행에 -- 가 오면 이 조건을 무시하게 하는 것입니다.
===
gnu getopt 에서는 - 다음에 문자가 있으면 옵션으로 취급을 하는데, 명령행에 -- 가 오면 옵션의 끝임을 알리는 옵션으로 동작합니다. 이렇게 하면 -- 옵션 뒤에 등장하는 - 는 stdin(혹은 stdout)를 의미하지않고 파일명으로 취급됩니다.
<<<
댓글 달기