Finger에 0이 아닌 반환 값이 없는 이유는 무엇입니까?

Finger에 0이 아닌 반환 값이 없는 이유는 무엇입니까?

나는 종종 스크립트에서 명령의 반환/상태 값을 사용합니다. Finger 명령이 값을 반환하지 않는 이유가 궁금합니다.

예를 들어,

$ finger kevin
Login: klang                 Name: Kevin Kang
etc...                       Shell: /bin/bash
No mail.
No Plan.

$ echo $?
0

$ finger blabla
finger: blabla: no such user.

$ echo $?
0

Ubuntu 및 RH에서 테스트되었습니다. 나는 문자열 조작을 하고 "해당 사용자 없음" 응답을 찾을 수 있다고 생각하지만 그것은 번거로운 것 같습니다.

매뉴얼 페이지가 나열되지 않습니다어느반환 값.


예, 반환 값은 0입니다. 그러나 이것이오직그것이 가치 있는 것 - 나는 그것을 철자해야 한다는 것을 깨닫지 못했습니다.

답변1

finger찾을 수 없음 사례는 0이 아닌 반환 코드에 적합한 것으로 간주되지 않습니다.

그러나 다음과 같은 실제 오류 상황도 있습니다.

$ finger -x
finger: invalid option -- 'x'
usage: finger [-lmps] [login ...]
$ echo $?
1

소스 코드를 수정하여 동작을 변경하는 것은 쉽지 않지만 fingerFinger가 절대 실패하지 않을 것으로 예상하는 스크립트를 중단하는 것은 아마도 수행되지 않을 것입니다.

finger지속해야 한다면... 목표를 달성하려면 손가락 출력 후처리를 계속해야 할 것 같습니다.

또는 getent이를 사용하여 유용한 반환 값을 제공할 수 있습니다.

$ getent passwd root
root:x:0:0:root:/root:/bin/bash
$ echo $?
0
$ getent passwd foo
$ echo $?
2

답변2

손가락은 아님POSIX 지정, 구현 시 원하는 대로 반환 코드를 처리할 수 있습니다. 대부분의 Linux 배포판은 이 패키지의 BSD 버전을 복사한 것 같습니다.

우분투의 경우,https://launchpad.net/ubuntu/+source/bsd-finger.bz2 소스 코드가 포함된 .bz2 아카이브가 생성됩니다 finger.c. 코드는 0이 아닌 값이 반환되는 두 곳만 보여줍니다.

  • 잘못된 옵션(예:jlliagre가 이미 지적했습니다.).

  • calloc 루틴이 여유 메모리에 해당하는 정수를 찾을 수 없는 경우(userlist 함수에서) 가능성은 낮습니다.

그렇지 않으면 기본 함수는 무조건 0을 반환합니다.

답변3

반환 코드가 있습니다. 당신은 할 수 없습니다아니요반환 코드가 있습니다. 항상 finger테스트에서 반환 하십시오 0. 0"반환 코드 없음"이 아닙니다.

관련 정보