EDITOR = vi crontab -eを使用して存在しない文字列を検索しようとしたときにエラーが発生しました。

EDITOR = vi crontab -eを使用して存在しない文字列を検索しようとしたときにエラーが発生しました。

詳細

OS:Solaris 10、アップデート11
ハードウェア:M5-32 LDOM、V490、IBM x3650、T5240、VMware仮想マシンなど...
EDITOR=vi
用語=vt100
tmpディレクトリ=/var/tmp
cron shell=/sbin/sh
私のシェル=/bin/bash

質問

crontabを修正しようとすると非常に興味深いエラーが発生しますcrontab -e

viをエディタとして使用して、存在しない文字列を検索してcrontab -e構文を検証して確認し、保存しようとすると、変更がなくてもエラーが発生したというメッセージが表示されます。

はい

admin@server# export EDITOR=vi
admin@server# crontab -e

コマンドモードでは、「foobar123」など、存在しない文字列を検索します。 「パターンが見つかりません」というメッセージが表示されたら、これを試してみると:wq...

The editor indicates that an error occurred while you were
    editing the crontab data - usually a minor typing error.

    Edit again, to ensure crontab information is intact (y/n)?
    ('n' will discard edits.)

明らかに、すぐに戻って保存を選択した場合、エラーは発生しません。これは、VMwareからM5-32 LDOM、V490物理システムまで、あらゆる種類のSolarisで繰り返すことができます。 cronが存在しない文字列検索をエラーとして解釈しますがvisudo

関連するメモでは、Solaris 11 はこのエラーを生成しません。これが一種のPOSIX仕様であれば、なぜ11ではなくSolaris 10に適用されますか?

ベストアンサー1

Solaris 10またはSolaris 11用のソースコードがないと確かに言うことはできませんが、疑わしいです。トーマス・ディッキーvimを発見したことによると、彼は正しい道を進んでいます。

私は追跡したIllumOSソースの一つex / viディレクトリでerrcntを検索してください。errcntが増加のみを示します。errcnt は main() の戻りコードとして使用されます。

したがって、viでerrcntを増やすことができない場合、crontabコマンドに「バブルアップ」されます。crontab用のIllumOSソース0以外の値では満足できないことを示します。

crontab.cのコメントも参考にしてください!

311             ret = system(buf);
...
327             if ((ret) && (errno != EINTR)) {
328                 /*
329                  * Some editors (like 'vi') can return
330                  * a non-zero exit status even though
331                  * everything is okay. Need to check.
332                  */

おすすめ記事