귀하의 질문 중 1) 만 포함합니다.
당연히 API는 제작자의 의사에 따라 언제든지 변경 될 수 있으므로 모든 언어에서 종속 소프트웨어를 중단 할 수 있습니다. 즉, 유닉스 툴의 I / O "API"에 대한 좋은 아이디어 는 실제로는 아무것도 없다는 것 0x0a
입니다. 좋은 스크립트는 데이터를 작성하는 대신 Unix 도구로 데이터를 필터링 합니다. 즉, 입력 또는 출력 사양이 변경 되었기 때문에 스크립트가 중단 될 수 있지만 스크립트에 사용 된 개별 도구의 I / O 형식 (실제로는 존재하지 않음)이 변경되지 않았기 때문에 (실제로 존재하지 않는 무언가 때문에) 실제로 변경할 수 없습니다).
기본 도구 목록을 살펴보면 필터만 이 아니라 생산자 속성을 지정하는 것이 거의 없습니다 .
- wc- 바이트 수, 단어 수, 행 수를 인쇄합니다. 매우 간단한 형식이므로 절대로 변경 될 가능성이 없으며 스크립트에서 사용되지 않을 가능성이 높습니다.
- diff- 다른 출력 형식이 발전했지만 문제에 대해 들어 보지 못했습니다. 또한 일반적으로 감독 없이는 사용되지 않습니다.
- 날짜 -이제 여기서는 특히 시스템 로캘과 관련하여 우리가 생산하는 것을 관리해야합니다. 그러나 그렇지 않으면 출력 형식이 RFC로 지정되어 있으므로 직접 지정하지 마십시오.
- cal- 그것에 대해 이야기하지 말고 출력 형식이 시스템마다 크게 다르다는 것을 알고 있습니다.
- LS , , 승 , 지난 - 당신이 LS를 구문 분석하려면 나는, 그냥 의미되지 않았다 없습니다 도움이 될 수가되게합니다. 또한 누가 대화 형 목록 작성자입니까? 스크립트에서 그것들을 사용한다면 당신이하는 일을주의해야합니다.
- 다른 게시물에서 시간 이 지적되었습니다. 그러나 그렇습니다. ls와 동일합니다. 대화식 / 로컬 사용을위한 추가 정보. 그리고 bash 내장은 GNU 버전과 매우 다르며 GNU 버전은 수년간 버그가 수정되지 않았습니다. 그것에 의존하지 마십시오.
다음은 바이트 스트림보다 더 구체적인 특정 입력 형식을 예상하는 도구입니다.
- bc , dc- 계산기. 이미 더 해킹 된 측면 (실제로는 스크립트에서 사용하지 않음)과 아마도 매우 안정적인 I / O 형식입니다.
파손 위험이 훨씬 높은 다른 영역, 즉 명령 줄 인터페이스가 있습니다. 대부분의 도구는 시스템과 타임 라인에서 서로 다른 기능을 가지고 있습니다. 예는
- 정규식 -정규식을 사용하는 모든 도구 는 시스템 로케일 (예 : LC_COLLATE)에 따라 의미를 변경할 수 있으며 정규식 구현에는 많은 미묘함과 세밀 함이 있습니다.
- 멋진 스위치를 사용하지 마십시오.
man 1p find
예를 들어 시스템 맨 페이지 대신 POSIX find 맨 페이지를 읽는 데 쉽게 사용할 수 있습니다 . 내 시스템에는 맨 페이지 -posix가 설치되어 있어야합니다.
그리고 이러한 스위치를 사용할 때에도 일반적으로 오류가 미묘하게 발생하지 않으며 데이터를 독살하지 않습니다. 대부분의 프로그램은 알 수없는 스위치로 작업하는 것을 거부합니다.
결론적으로, 쉘은 실제로 가장 이식 가능한 언어 중 하나가 될 가능성이 있다고 말할 것입니다 (휴대용 스크립트를 작성할 때 이식 가능합니다). 미묘한 오류가 발생하는 즐겨 사용하는 스크립팅 언어 또는 컴파일에 실패하는 즐겨 사용하는 컴파일 된 프로그램과 비교하십시오.
또한 비 호환성으로 인해 파손이 발생할 수있는 드문 장소에서는 아마도 시간 때문이 아니라 여러 시스템의 다양성 때문에 (20 년 전과 20 년 후) ). 그것은 도구의 단순성에 대한 결과입니다.