私はしばしばスクリプトでコマンドの戻り値/ステータス値を使用します。 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
見つからないケースは、ゼロ以外の戻りコードに適しているとは見なされません。
ただし、次のような実際のエラー状況もあります。
$ 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バージョンをコピーしたようです。
Ubuntuの場合、https://launchpad.net/ubuntu/+source/bsd-finger.bz2ソースコードを含む.bz2アーカイブが作成されますfinger.c
。コードは、ゼロ以外の値が返される2つの場所のみを示します。
無効なオプション(例:jlliagreはすでに指摘しています。)。
callocルーチンが空きメモリに対応する整数を見つけることができない場合(userlist関数で)、可能性は低いです。
それ以外の場合、基本関数は無条件ゼロを返します。
答え3
戻りコードがあります。できないいいえ戻りコードがあります。常にfinger
テストから返してください0
。 0
「返品コードなし」ではありません。