PICK(1) — NEWS-OS Programmer’s Manual
名称
pick − 内容によってメッセージを選択する
形式
^pick~^^ −cc~^ [+folder] [msgs] [−help]
^^^ −date~^ [−before date] [−after date] [−datefield field]
^^^ −from~^
^^^
⎧
│
│
⎨
│
│
⎩−search~
⎫
│
│
⎬
│
│
⎭^ pattern [−and ...] [−or ...] [−not ...] [−lbrace ... −rbrace]
^^^ −subject~^
^^^ −to~^ [−sequence name ...] [−public] [−nopublic] [−zero] [−nozero]
^^^ −−component~^ [−list] [−nolist]
通常:
scan ‘pick −from jones‘
pick −to holloway −sequence select
show ‘pick −before friday‘
解説
pick コマンドは、フォルダ中のメッセージを指定された内容によって検索し、 確認するコマンドです。2種類の検索法があります。 1つはパターンマッチングで、もう 1つは日付の限定によるものです。
マッチングのために、改良された grep(1) コマンドが使用され、 そのために全ての正規表現(ed(1) 参照)が ‘pattern’ 中で使用できます。 ‘−search’ を指定すると ‘pattern’ が直接使用され、 そうでなければ grep パターンが次のように作成されます。
“component[ \t]∗:.∗pattern”
これは、指定された 1つのコンポーネントについて、 他のパターンマッチング要求が制限され、 ‘−search’ に指定されたパターンがメッセージ中の全ての領域 (ヘッダ、本文を含む)で検索されることを意味します。
‘−−component pattern’
という表現は
‘−search “component[ \t]∗:.∗pattern” ’
の省略形です。
これは、“To:”、あるいは “cc:”、“Date:”、 “From:”、“Subject:” 以外の コンポーネントを選び出すために使われます。 たとえば、‘pick −−reply−to pooh’ です。
パターンマッチングは、1行ごとに行なわれます。 ヘッダのメッセージ中では、 それぞれのコンポーネントが 1つの長い行として扱われますが、 本文中ではそれぞれの行が 1行ずつに分けて扱われます。 検索パターン中の小文字は、 メッセージ中の大文字と小文字の両方にマッチしますが、 大文字は大文字とだけしかマッチしません。
‘−date’ スイッチはパターンマッチ操作を行なうので、 特定の日付に送ったメッセージを探すには パターンストリングは メッセージの “Date:” フィールド にマッチしなくてはなりません。
どのようなパターンマッチング操作要求されたかにかかわらず、 ‘−after date’ と ‘−before date’ スイッチを与えて、 全てのメッセージに対して日付/時刻による限定を導入することができます。 デフォルトでは “Date:” フィールドが検索されますが、 他の日付を有するフィールド(例えば “BB−Posted” や “Delivery−Date”)に対して行ないたいときは、 ‘−datefield field’ スイッチを使います。 pick コマンドは実際、メッセージ ‘msgs’ で指定された 各メッセージ中の日付フィールドを解釈し ‘−after’ あるいは ‘−before’ スイッチの使用によって指定された 日付/時刻と比較します。 ‘−after’ スイッチが与えられた場合、指定された日付より 後の “Date:” フィールド値を持つメッセージのみが対象になります。 ‘−before’ スイッチも、日付の前後についてを除いて同様の動作をします。
‘−after date’ と ‘−before date’ スイッチは、 公式の RFC-822 形式の日付指定を引数として受け取ります。 Pick はいくつかの記載がないフィールドに対してデフォルト値を使用 しますから、日付を全て指定する必要はありません。 デフォルト値の使用されるフィールドは(デフォルト値を用いる順で)、 タイムゾーン、時刻とタイムゾーン、日付、日付とタイムゾーンです。 すべてのデフォルト値は、カレント時刻、および日付、タイムゾーンから得ます。 公式の RFC-822 形式の日付以外に、pickは “sunday” や “monday” などの曜日や、 “today” や “tommorow” (24時間前) や “tomorrow” (今から24時間) などの特別な日付を認識します。 ここで使われる全ての曜日は過日のものです (火曜日に pick “sunday” を行なった場合の日曜日とは、 この間の日曜日であって、次にくる日曜日のことではありません)。 最後にまた、pick は “−dd” という形式を識別します。 これは、“dd 日前”という意味です。
pick は、‘−and’、および ‘−not’、‘−lbrace ... −rbrace’ スイッチによって、検索プリミティブにおいて 複雑なブールオペレーションをサポートします。例えば、
pick −after yesterday −and −lbrace −from freida −or −from fear −rbrace
は、“freida” あるいは “fear” から 最後に送られたメッセージを識別します。
マッチングプリミティブは、‘−not’、‘−and’、‘−or’ の 順で優先順位を扱います。 このデフォルトの順位を変更するためには、 ‘−lbrace ... −rbrace’ スイッチを使用します。 これは、論理式中での開きカッコ、あるいは閉じカッコと同様に作用します。
検索が完了すると、‘−list’ スイッチが指定されていれば、 選択されたメッセージのメッセージ番号がニューラインで分けられ、 標準出力に書き込まれます。 このオプションは、シェルのバッククォーティング規則を使い、 他の MH プログラムの引数を手早く生成したいときに、特に有用です。 例えば、
scan ‘pick +todo −after “31 Mar 83 0123 PST”‘
は、scan に対し、指定されたフォルダ中の、 判定基準に適合するメッセージをスキャンするよう指示します。 pick のコンテクストの変更は scan の起動よりも先に出力されるので、 scan コマンドに対してさらにフォルダ引数を与える必要はありません。
‘−list’ スイッチ操作の有無にかかわらず、 ユーザが定義を希望するときには、 ‘−sequence name’ スイッチを各シーケンスについて指定することができます。 指定されたシーケンスは、 それぞれ pick によって選択されたメッセージと全く同じように定義されます。 例えば、
pick −from frated −seq fred
は、選択されたメッセージを含むカレントフォルダ “fred” に、 新しいメッセージシーケンスを定義します。
pick が ‘−sequence name’ スイッチを処理する時には常に、 ‘−nolist’ スイッチをセットするので注意してください。
デフォルトで、pick はメッセージの追加の前に シーケンスをゼロにします。 この動作は、‘−nozero’ スイッチを指定することによって抑制できます。 この結果、既存のシーケンスがあれば、 pick によって選択されたメッセージはシーケンスに付加され、 シーケンス中の既存のメッセージはそのまま保存されます。
‘−public’ と ‘−nopublic’ スイッチは、pick によって、 mark コマンドと同じように使用されます。
‘-cnv’ が指定されていると、メッセージを環境変数 ‘LANG’ で指定された内部コードに変換したのちに検索を行ないます。 ‘-nocnv’が指定されていると変換は行なわずそのまま検索します。
関連ファイル
^$HOME/.mh_profileユーザプロファイル
プロファイルコンポーネント
^Path:ユーザの MH ディレクトリ ^Current−Folder: デフォルトのカレントフォルダ
デフォルト値
‘+folder’ カレントフォルダ
‘msgs’ 全て
‘−datefield date’
‘−nopublic’ フォルダがリードオンリーのとき。それ以外は ‘−public’
‘−zero’
‘−list’ ‘−sequence’ の指定がない場合。それ以外は ‘−nolist’
‘−cnv’
コンテクスト
フォルダが指定された場合、そのフォルダが以後のカレントフォルダになります。
歴史
以前のバージョンの MH では、 pick は選択されたメッセージについて表示(show)、 スキャン(scan)、リファイル(refile)を行なっていました。 しかしこれは UNIX の見地からはむしろ非論理的でした。 従って、pick はシーケンスを定義し、 それを出力するように変更されました。 したがって、新しい pick では、 pick に対して pick が起動する他の MH コマンド のスイッチを際限なく指定する代わりに、 MH コマンド用の引数を生成するように使用できます。
また、以前のバージョンでは、検索文字列や日付/時刻制限を指定しないと、 pick は中止されました。 新しいバージョンでは中止されず、 指定されたメッセージがマッチングされるだけです。 よって、
mark −add −nozero −seq fear last:20
show fear
とタイプする代わりに、
show ‘pick last:20 −seq fear‘
とすればよくなりました。
また、日付を比較するときにタイムゾーンは無視されていましたが、 これは変更されました。
バグ
‘−after date’ と ‘−before date’ スイッチに対する引数は、 コマンドが実行されるシェルによって 1つのトークンとして解釈されなければなりません。 従って、通常これらの引数は、ダブルクォーテンションマークの 内側に置かなければなりません。 また、‘−datefield’ スイッチは ‘−after date’ や ‘−before date’ スイッチの 前に置かれなければなりません。
コマンドがバッククォート操作中で、例えば
scan ‘pick −from jones‘
のように用いられ、しかも pick が失敗した場合 (“jones” からのメッセージがなかった場合)、 それでもシェルは外側のコマンド(ここでは “scan” )を実行します。 マッチするメッセージがないので pick は何も出力せず、 バッククォートされた pick の結果として外側のコマンドに渡される 引数は空になります。 外側のコマンドが MH プログラムの場合、 それらはあたかもデフォルトの ‘msg’ や ‘msgs’ が用いられたように 動作します(たとえば scan コマンドにおける “all” のようにです)。このような思わしくない動作を防止するためには、 ‘−list’ を指定し、かつ標準出力を tty 以外にします。 こうすれば、コマンドは不成功の場合、 不正メッセージ番号 “0” を出力します。 その後の外側のコマンドも自動的に不成功となります。
NEWS-OSRelease 4.2.1R