यह सब इसलिए शुरू हुआ क्योंकि मुझे C ++ प्रकार / फ़ंक्शन पर मैन पेज चाहिए थे। मुझे Cppman नामक एक रिपॉजिटरी मिली, जिसे इन पेजों को या तो cplusplus या cppreference से खुरचने के लिए डिज़ाइन किया गया था। इस बिंदु पर man std::cout
अपेक्षित मैनपेज प्रदर्शित होगा, लेकिन man -k cout
'उचित कुछ भी नहीं' कहेगा।
तब से मैंने सभी लेकिन cplusplus.com फ़ोल्डर को हटा दिया है, इसे 'man3' नाम दिया है, और चलाएं mandb
(अच्छे उपाय के लिए रूट के रूप में, फिर खुद के रूप में) जिसने एक खाली 'cat3' फ़ोल्डर और एक 'index.db' का उत्पादन किया। अब मैं MANPATH की स्थापना इस प्रकार कर रहा हूं:
old_manpath=$(manpath 2>/dev/null)
export MANPATH=$HOME/.local/share/man:$old_manpath
परिणाम:
> man -k std::cout
std::cout (3) - Standard output stream
> man -k std::result_of
std::result_of (3) - Result of call
std::result_of (3cxx) - (unknown subject)
> man 3 std::result_of # the page I expect
> man 3cxx std::result_of # scrawny and malformed manpage
अगर मैं इन '3cxx' पेजों को छिपा सकता हूं man [-k]
, तो मैं संतुष्ट हो जाऊंगा । हालाँकि, मैं फ़ाइलों को हटाना चाहता हूँ और पहली बार में उन्हें उत्पन्न करने से बचूँगा। मुझे '* .3cxx.gz' फाइलें दिखाई नहीं देतीं।
मुझसे कहां गलती हो गई? मैं और मेरा मैनपाट कैसे और कहां होना चाहिए, अगर वास्तव में यह समस्या है?
संपादित 1 - मैंने इस सवाल से बहुत सारे विवरण छीन लिए, लेकिन 3cxx मैन पेज की सामग्री शायद बता रही हो। एक के लिए, man 3cxx std::result_of
शीर्षक है std::result_of< _Signature >(3cxx)
( <_Signature>
सामान्य मैनपेज से गायब है); SYNOPSIS खाली है, उसके बाद विवरण के बजाय "विस्तृत विवरण" है। मैंने नीचे जो दिखता है उसे दोहराने की कोशिश की है (अंडरस्कोर इंडेंटेशन का प्रतिनिधित्व करता है।)
विस्तृत विवरण
____ टेम्पलेट <typename _Signature>
________class std :: result_of <_Signature> "result_of
________Definition file type_traits की लाइन 2097 पर।
वह भटका "
जैसा कि लिखा गया है, और कुछ अन्य पृष्ठों में मुख्य प्रकार के बाद दिखाई देता है जिन्हें मैंने जांचा था। पृष्ठ को विचलित करने वाले पृष्ठों में अभी भी पृष्ठ के नीचे, या लाइनों के अंत में टेम्पलेटों को शामिल नहीं करने के बाद कुछ बेजोड़ उद्धरण चिह्न हैं ।
संपादन 2 - मैं यह प्रदर्शित नहीं कर सकता कि प्रदर्शित मैनपेज से जुड़ी फाइल को कैसे खोजूं, या मैं पूरे बैच का निरीक्षण / हटा सकता हूं। उपयोग करने से lsof
मुझे एक मैनपेज खुला जैसा कुछ भी नहीं दिखता है, ऐसा नहीं है कि मुझे उम्मीद है कि यह फाइल खुली रहेगी। मेरा सबसे अच्छा अनुमान यह है कि इन ठूंठदार index.db
मनकों को "dbm / ndbm" डेटाबेस फ़ाइल में बेक किया जाता है ; मेरे पास python3-gdbm
पैकेज है, इसलिए मैंने इसे देखा और पाया कि इसमें 'dbm.gnu' टाइप है और इसकी "पहली" प्रविष्टि है b'std::list::cend\x00' => b'-\t3\t3\t1509183341\t749359924\tA\t-\t-\tgz\tReturn const_iterator to end\x00'
। यह मुझे सुझाव देगा कि index.db केवल नाम / विवरण जोड़े को संग्रहीत करता है, और शायद सिर पर उन संख्याओं में से कुछ एक फ़ाइल के अनुरूप होंगे, लेकिन फिर भी, मैं कार्रवाई में इसे देखने के बिना कैसे पता लगाने की उम्मीद कर सकता हूं। । मुझे लगता है कि जहां तक मैं अकेला प्रबंधन कर सकता हूं।
3 संपादित करें - मैंने प्रविष्टियों को डिकोड किया:
>>> from dbm.gnu import *
>>> o=open('/home/john/.local/share/man/index.db', 'c')
>>> def nextn(i,n):
... sum=""
... for j in range(0,n):
... sum += i.decode("utf-8") + "\n" + o[i].decode("utf-8")
... i=o.nextkey(i)
... return sum
>>> all=nextn(o.firstkey(), len(o.keys()))
>>> all.find('cxx')
-1
# Example entry for reference:
std::list::cend
- 3 3 1509183341 749359924 A - - gz Return const_iterator to end
प्रविष्टियाँ हैश (अर्ध-यादृच्छिक) क्रम में हैं, इसलिए इनमें से एक अच्छा नमूना '3cxx' प्रविष्टियों के बारे में '3' प्रकार के रूप में दिखाना चाहिए। इसके बजाय, वे सचमुच सभी प्रकार '3' हैं। Index.db हुक बंद है, लेकिन मैं आधिकारिक तौर पर विचारों से बाहर हूं।