한 사람이 할 수 있다는 걸 알아요추가 파일 설명자 정의일시적인 용도로만 사용하세요. 그러나 일반적인 CLI 도구에서 지원하는 "stdmeta" 파일 설명자가 실제로 사용되는 것을 확인했습니다. 이 파일 설명자는 다음 줄을 출력합니다.데이터의 일부가 아닙니다하지만실수가 아니다. Unix나 Linux에 이러한 추가 기능을 제안하는 방법은 무엇입니까?
한 가지 사용 예는 ps 명령의 헤더를 출력하는 것입니다.
$ ps
PID TTY TIME CMD
6394 pts/15 00:00:00 bash
10294 pts/15 00:00:00 ps
10295 pts/15 00:00:00 bash
출력을 정렬, grep 또는 필터링하려면 헤더를 잃거나 데이터에 혼합해야 합니다. 이 문제는 다음과 같이 해결될 수 있습니다.첫 번째 줄을 stderr로 리디렉션, 또는수많은 다양한 창의적인 솔루션, 하지만 분명히 이것들은서투른 임시 변통과 기억하기 어려운 솔루션전용 stdmeta 파일 설명자가 없기 때문입니다.
또 다른 예는 의 출력입니다 curl
. 곱슬메타데이터를 stderr로 파이프이렇게 하면 출력을 파이핑할 수 있는 애플리케이션에 복잡성을 추가하지 않고도 사람들에게 진행 상황을 알릴 수 있습니다.이번에도 누락된 stdmeta를 대체하기 위해 stderr을 사용하고 있습니다.
나는에 편지를 보내야한다랑카 멜레그리고 내 사건을 진술해? 이로 인해 일부 Unix 레거시 응용 프로그램과의 호환성이 손상될 수 있으므로 케이스를 Unixy 설정으로 옮겨야 합니까?
답변1
메타데이터 캡처에 대한 제안표준 위안충분히 단순해 보여서 버리고 지금 나타나는 "실제" 데이터를 사용할 수 있습니다.표준 출력일관된 방식으로. (그린필드 상황에서 반드시 나쁜 요구 사항은 아닙니다.)
실용적인 수준에서 프로그램은 다음을 처리하도록 코딩됩니다.표준 출력그리고표준 에러. 새로 만들고 싶다면표준 위안일반적으로 부분 데이터를 기존 설명자로 보내면 많은 일이 쉽게 망가질 수 있습니다. ps -ef
유사한 작업을 수행하는 레거시 코드뿐만 아니라 귀하의 제안도 고려하십시오 ps -ef | sed 1d | ...
. 더 이상 헤더를 보내지 않는 경우표준 출력대신에 그것을 밀어표준 위안이 코드는 잘못 작동합니다.
-q
내 생각에는 (조용한 출력을 위해) 모든 유틸리티에서 플래그를 사용할 수 있는 것이 더 좋을 것 같습니다 . 그러나 유틸리티가 무엇을 사용할 수 있는지 알고 있는 거의 모든 스크립트가 -q
그렇지 않은 이전 버전을 처리해야 한다는 점을 고려하면 이것조차 어려움이 많습니다.