Когда запускаешь apt-cache, находясь в удалённой (стёртой, несуществующей) директории, то apt-cache обламывается с невразумительной ошибкой: [root@radlinux mailfromd]# apt-cache search spam rpmdb: no absolute path for the current directory: Нет такого файла или каталога error: db4 error(2) from dbenv->open: Нет такого файла или каталога error: cannot open Packages index using db3 - Нет такого файла или каталога (2) E: невозможно открыть базу данных RPM в приведённом примере директория mailfromd была убита предыдущим apt-get remove. Нужно, чтобы или apt-cache сообщал, что текущей директории не существует :) и предложил бы перезапустить себя по обретению пользователем существующего пути (это workaround) или бы нормально работал бы и в такой ситуации (имхо, в текущем пути нет ничего такого, чего нельзя было бы достать через абсолютные пути -- отталкиваться от pwd необязательно)
Не надо запускать программы типа apt-cache из несуществующих каталогов, тем более что диагностика apt-cache оказалась более-менее понятной. Мне кажется неразумным добавлять chdir("/") во все программы. Некоторые, в т.ч. и apt-cache, принимают в качестве параметров пути к файлам, поэтому chdir("/") для них неприемлем.
Дим, а он может просто выйти после "no absolute path for the current directory: Нет такого файла или каталога"? Даже не так. Можно ли в apt-get, apt-cache в _самое_ начало вкрутить проверку условий (несуществующая директория, неверная операция, и т.п.)? И в случае ошибки выходить? А не считать всю базу, а потом говорить "неверная операция serach" или, как тут, отдавать rpmdb на откуп проверку текущей директории? Это раз, и два -- oldpwd=pwd(); chdir("/") -- и работай сколько хочешь с путями файлов в параметрах, но при этом находясь в гарантированном месте. Нету места более гарантированного.
Я вот чего не понимаю: почему возникло желание добавлять проверку именно в apt-get, а не в каждую программу, прямо или косвенно использующую текущий каталог? Почему, в конечном итоге, это лучше чем заблаговременно выполненный "cd /", или, как заведено у демонов, chdir("/")?
Потому что пользовательские программы пишут для пользователей, а не для андроидов. Вразумительный репорт не должен (пусть косвенно) дезынформировать -- первая мысль, которая приходит в голову, глядя на репорт о том, что apt не может найти/открыть rpmdb -- это то, что rpmdb грохнулась нафик. Потому что apt -- одна из ключевых программ проектов ALT. И с её поведением встречается каждый, кто использует наши проекты. Чорт возьми, потому что у нас каждая первая ключевая программа возвращает ошибки в таком виде, что их только андроиды понять способны (hsh тому пример -- на очереди...). И это не в последнюю очередь влияет на мнение пользователей. И если кто-то оценивает в первую очередь по функционалу, а не по дружелюбности интерфейса -- хорошо, но для кого-то вразумительная диагностика такой же функционал.
Пользователи, которые не в состоянии понять диагностику "no absolute path for the current directory: Нет такого файла или каталога", обычно не умеют запускать программы из удалённых каталогов. Ну и, наконец, рабочий каталог может быть удалён прямо во время работы процесса.
Ошибка не в том что диагностика недостаточна. Ошибка в том, что после этой ошибки он не вываливается немедленно, а продолжает пытаться работать и выводит ещё 3 _неправильных_ сообщения об ошибке.
apt-* should test current working directory for existence and abort instantly when the check fails, to avoid subsequent errors.
Ошибка не воспроизводится. [cas@cas rem]$ ll `pwd` ls: невозможно получить доступ к /home/cas/tmp/rem: Нет такого файла или каталога [cas@cas rem]$ apt-cache search dddd [cas@cas rem]$