안경
운영 체제: OS X; 클라이언트: 터미널: sh, bash
질문
Commands에 추상화 계층을 추가하기 위해 쉘 스크립트를 작성 중입니다 ls
. 나는 그것을 "깨지지 않게" 만들고 싶었기 때문에 먼저 ls
([ls(1) - Linux 매뉴얼 페이지][1]을 통해) 허용되는 모든 가능한 명령을 파악하여 전달된 옵션에 대해 또 다른 레이어를 수행할 수 있었습니다. 명령줄을 통해 제어합니다.
스크립트를 시작하기 전에 ls
특정 긴 옵션(이중 하이픈)의 일반적인 기능이 무엇인지 알아보기로 결정했습니다. 나는 이러한 방법 중 몇 가지를 시도했지만 각각 어떤 면에서는 실패했습니다. 예를 들어, 실행 결과는 다음 ls --ignore-backups
과 같습니다.
<dir> <username>$ ls --ignore-backups
ls: illegal option -- -
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]
위의 내용은 sh를 통해 실행하든 bash를 통해 실행하든 동일합니다(경험이 많은 사용자에게는 이것이 분명해야 한다는 것을 알고 있습니다).
이 시점에서 이것을 실행했는데 내 컴퓨터의 버전이 man ls
단일 문자 옵션만 허용하는 것으로 나타났습니다.ls
질문
- 내 스크립트를 범용으로 만들려면 어떻게 해야 합니까?
- 일반적으로 기본 UNIX/Linux 명령에 명령줄 인수를 전달할 때 작업에 사용할 수 있는 표준 라이브러리가 있습니까?
- UNIX/Linux 명령 라이브러리에 대한 기본적인 이해가 부족합니까?
참고: 저는 쉘 스크립팅을 처음 접했고 올바른 질문을 하고 있는지 잘 모르겠습니다.
답변1
ls
OS X를 개발하고 대상으로 삼는 경우 Linux 매뉴얼 페이지보다는 OS X 매뉴얼 페이지를 살펴보고 거기에 설명된 옵션을 따르는 것이 좋습니다 .
또는 스크립트가 모든 Unix 구현에서 "깨지지 않게" 작동할 것으로 기대한다면 다소 불운한 것입니다. 모든 구현에서 찾을 수 있는 공통 옵션 세트가 있지만POSIX에 의해 정의됨물론 GNU 이중 하이픈 확장과 같은 많은 비표준 확장이 있지만 ls
방언 및/또는 운영 체제에 따라 다를 수 있는 단일 문자 옵션도 있습니다. 특정 명령 구현에서 지원되는 옵션을 식별하는 일반적이고 이식 가능한 방법은 없습니다.
답변2
이식 가능한 스크립트 작성을 선호한다면 GNUisms
eg를 사용하지 마십시오 long options
.
일반적으로 정의된 옵션이면 POSIX
충분합니다. 대부분의 GNU 긴 옵션은 어디에서나 사용되는 공식 짧은 옵션의 별칭일 뿐입니다.