나는 종종 스크립트에서 명령의 반환/상태 값을 사용합니다. 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
소스 코드를 수정하여 동작을 변경하는 것은 쉽지 않지만 finger
Finger가 절대 실패하지 않을 것으로 예상하는 스크립트를 중단하는 것은 아마도 수행되지 않을 것입니다.
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
"반환 코드 없음"이 아닙니다.