명령이 옵션을 지원하는지 확인하는 가장 좋은 방법

명령이 옵션을 지원하는지 확인하는 가장 좋은 방법

특정 호스트의 명령이 특정 옵션을 안정적인 방식으로 지원하는지 확인하고 싶습니다.

내 사용 사례는 로컬을 확인하는 것입니다nc이 명령은 -w시간 초과 옵션을 지원합니다.

내 첫 번째 생각은 옵션을 사용하여 명령을 실행한 다음 반환된 값을 확인하는 것이었습니다.

<command> <option> ...
[ $? -ne 0 ] && echo "NOT SUPPORTED"

이 방법은 다음과 같습니다.다른0이 아닌 값이 생성될 수 있는 이유입니다.

예를 들어, 에 수신 대기 중인 Unix 소켓이 있고 192.168.1.122:3888로컬 호스트에서 시간 초과를 테스트하고 싶습니다.nc옵션(우리 의견으로는 지원되지 않음):

> nc 192.168.1.122 3999 < /dev/null 2>/dev/null
> echo $?
1
> nc 192.168.1.122 3888 -w 1 < /dev/null 2>/dev/null
> echo $?
1

반환된 값으로는 잘못된 포트 오류 사례와 지원되지 않는 매개변수로 인한 잘못된 호출을 구분할 수 없습니다.


선호할 수 있는 다른 옵션이 있습니까?

답변1

명령줄 처리에 있어서 명령 동작은 매우 다양하기 때문에 범용 솔루션을 만드는 것은 불가능합니다. 각각의 경우에 실제로 지원되는 명령줄 스위치를 확인하는 방법을 찾아야 합니다. 치명적인 동작(예: -w 옵션을 사용하여 호출할 때 잘못된 작업을 수행하는 일부 흔하지 않은 nc 버전)을 방지하려는 경우 유일한 옵션은 알려진 버전과 지원되는 명령줄 스위치 목록을 유지하고 다음 버전 사용을 거부하는 것입니다. 이 목록에 없는 명령입니다 :-)

관련 정보