लंबे मैन पेज पढ़ना और खोजना


32

मैं अंत में तंग आ गया जब के बारे में पढ़ना चाहते बैश की readऔर यह के -sसाथ विकल्प man bash। मुझे अंततः (4500 के आसपास की रेखा) सही जगह मिली, लेकिन यह हमेशा की तरह निराशाजनक था, क्योंकि दोनों /readऔर यहां तक ​​कि /\s-s\sखोजों के कई मैच हैं।

तो, सवाल यह है: मैं कुशलता से लंबे आदमी पृष्ठों को कैसे पढ़ सकता हूं, या अन्य तरीकों से स्थानीय रूप से समान जानकारी प्राप्त कर सकता हूं ? एक विशिष्ट उदाहरण के रूप में, read -s pwdशेल स्क्रिप्ट में देखने के बाद संबंधित दस्तावेज तक कैसे पहुंचा जाए ? एक अच्छा उत्तर एक शेल स्क्रिप्ट स्निपेट हो सकता है, या कुछ टूल के बारे में संकेत दे सकता है और इसका उपयोग कैसे किया जाता है, या कुछ और पूरी तरह से, जब तक यह पढ़ने के लिए सही स्थान खोजने में मदद करता है।

नोट: मैं साथ टैगिंग नहीं कर रहा हूं क्योंकि मैं चाहता हूं कि प्रश्न सामान्य रूप से मैन पेज पढ़ने के बारे में हो, भले ही वह संभवतः सबसे आम तौर पर सामना किए जाने वाले अपमानजनक मैन पेज हो।


मैं इसे एक उत्तर के रूप में नहीं डाल रहा हूं क्योंकि यह आपकी आवश्यकताओं के बाहर हो सकता है लेकिन: जब मुझे एक लंबे manपृष्ठ को पढ़ने की आवश्यकता होती है तो मैं अपने ऊपरी पैनल पर एक छोटी स्क्रिप्ट का उपयोग करता हूं। यूजियन.com/demo/gkman.txt साझा करें और आनंद लें
युजियन

मैं इसे एक उत्तर के रूप में नहीं डाल रहा हूं;) क्योंकि यह वास्तव में bashखुद के बारे में है: बस आप की तरह, मुझे भी ज्यादातर SHELL BUILTINSमैनुअल के हिस्से की आवश्यकता है , जो कि लाइन 3500 के बारे में है । इसलिए यह जानकर, अगली बार मैं बस कहूंगा man bashऔर फिर 66 प्रतिशत नीचे जा रहा हूं 66%, टाइप करके , फिर कुछ समय PgDn और मैं वहां हूं। हालाँकि मैंने 66 को चुना क्योंकि इसे "रूट 66" के रूप में याद किया जा सकता है , यह वास्तव में इससे थोड़ा अधिक है, यद्यपि याद रखना इतना आसान नहीं है जब तक कि यह आपके फोन की शुरुआत न हो, आदि। :) कम से कम "रूट 66" "दुनिया भर में सार्वभौमिक और ज्ञात है।
वाक्यविन्यास

जवाबों:


33

बैश बेसिन पर जल्दी से मदद पाने के लिए, उपयोग करें help:

help read

तुम क्या चाहते हो

मैन-पेज-जैसे फ़ॉर्मेटिंग के लिए, उपयोग करें

help -m read

या, और भी बेहतर,

help -m read | less

यदि आप अभी भी इसे मैन पेज में ढूंढने पर जोर देते हैं, तो मुझे लगता है कि मुझे कमांड के स्पष्टीकरण के लिए जल्दी से क्या मिलता है

/^\s*read [[]

यह काम करता है क्योंकि जब एक कमांड को पहली बार समझाया जाता है, तो इसका नाम लाइन की शुरुआत से थोड़ा प्रेरित होता है। के विशेष मामले में read, वास्तविक readदस्तावेज प्राप्त करने से पहले आपको थोड़ा सा ब्राउज़िंग करना पड़ता है क्योंकि (स्पष्ट कारणों के लिए) "पठन" शब्द पूरे मैन पेज में बहुत बार दोहराया जाता है। [[] का अर्थ है एक मैच के लिए [जो आमतौर पर वैकल्पिक मापदंडों से पहले होता है। (मैं आमतौर पर / ^ \ _ * छोड़ता हूं और बस / <अंतर्निहित कमांड> [[] करता हूं)

एक और विकल्प

यदि आपको प्रारूप बदलने में कोई आपत्ति नहीं है, तो आप अपने मैन पेज को डीवीआई या पीडीएफ फाइल में बदल सकते हैं:

man -T dvi bash >bash.dvi

या

man -T ps bash | ps2pdf - bash.pdf # Requires the Ghostscript suite for ps2pdf

बेशक, एक डीवीआई या पीडीएफ दस्तावेज़ दिया गया है, फिर आप आसानी से एक पाठ खोज कर सकते हैं।


हम्म, यह helpबहुत अच्छा है, मुझे आश्चर्य है कि मैंने इसके बारे में कभी नहीं सुना है ... ps2pdfक्या यह उपयोगी नहीं है क्योंकि यह (जाहिरा तौर पर) किसी भी तरह का सूचकांक नहीं बना सकता है।
हाइड

@hyde सुनिश्चित नहीं हैं कि आप एक सूचकांक बनाने के द्वारा क्या मतलब है, लेकिन आप के बारे में सुना है PTX ?
जोसेफ आर।

अनुक्रमणिका या तालिका की सामग्री, कि "ptx" बिल्कुल वही लगता है जो मेरा मतलब था।
१।

1
एक और, यहां तक ​​कि सरल विकल्प 'मैन बैश> बैशमैन.टैक्स' करना है। फिर आप बस अपने टेक्स्ट एडिटर में bashman.txt (एक और) विंडो खोल सकते हैं और जो आप चाहते हैं उसे खोजने के लिए यह सभी कमांड का उपयोग करते हैं। आप उन अनुभागों के लिए टैग जोड़ने के लिए फ़ाइल को संपादित भी कर सकते हैं जिन्हें आप सबसे अधिक बार संदर्भित करते हैं। Bashman.txt बनाना केवल-पढ़ने में मदद करता है ताकि आप इसे अपने संपादक में दुर्घटना के द्वारा संशोधित न कर सकें।
जो

आप अपनी पसंद के ब्राउज़र में मैन पेज भी खोल सकते हैं और इसके सभी टूल्स का उपयोग कर सकते हैं। देखें askubuntu.com/questions/339255/...
जो

9

दृष्टिकोण १

man bashउसके /read \[बाद/-s

दृष्टिकोण २

आप कमांड लाइन तर्क समझाने के लिए एक ओपन सोर्स टूल आज़मा सकते हैं, जिसे एक्सप्लेशेल कहा जाता है

इसका उपयोग स्थानीय स्तर पर किया जा सकता है। Https://github.com/idank/explainshell पर प्रलेखन पढ़ें

कैविट्स: आमतौर पर काम करता है, लेकिन केवल उबंटू के मेनपेज रिपॉजिटरी में पाए जाने वाले कमांड के साथ

आपके मामले में, यह -sस्विच को नहीं पहचान सकता है read -s pwd

दृष्टिकोण ३

मुझे एक और उपकरण मिला है जो आशाजनक लगता है लेकिन यह मेरे सिस्टम पर काम नहीं करता है।

समझाएं: यूनिक्स कमांड के लिए लघु प्रलेखन


एप्रोच 1 के साथ, आप /-s\bहिट्स से बचने के लिए ऐसा कर सकते हैं --some-other-command(जबकि अभी भी स्ट्रिंग्स ढूंढ रहे हैं जैसे कि -s,, जो आपको /-sस्पेस के साथ सर्च करने पर नहीं मिलेगा )।
डेविड नेप

8

मैं आमतौर पर इस मामले में क्या करता हूं man, बस चलाया जाता है , SHELL BUILTIN COMMANDSहेडिंग की खोज करता हूं , फिर बिलिन की खोज करता हूं

man bash
/^SHELL BUILTIN
/  read 

हालाँकि, बाश में आप कर सकते हैं

help read

या, सिस्टम पर निर्भर करता है, दोनों में से कोई भी

man 1 read
man bash-builtins

सामान्य तौर पर, मेरे पास ऐसा करने के लिए एक स्क्रिप्ट है he("शॉर्ट हेल्प")। आप इसे इस तरह से चलाएंगे:

he bash read

FYI करें, मैंने नाम बदल descदिया hegithub.com/mikelward/scripts/blob/master/he
मिकेल

3

एक आदमी पृष्ठ में जानकारी खोजने का कोई सामान्य तरीका नहीं है, किसी भी किताब में जानकारी खोजने का सामान्य तरीका है। यह इस बात पर निर्भर करता है कि आप क्या खोज रहे हैं।

जब आप शेल बिल्ड के बारे में जानकारी की तलाश कर रहे हैं, तो आप इंडेंटेशन के लिए एक लाइन सेव की शुरुआत में बिलिन के लिए खोज कर सकते हैं, और इसके बाद एक स्पेस: सर्च ^ *read␣(जैसे टाइप /^ *read␣ Enter) ( एक स्पेस है)। यह डैश, pdksh, mksh और bash के साथ काम करता है। Zsh का मैन पेज स्प्लिट है इसलिए आपको zshbuiltinsमैन पेज पढ़ने की जरूरत है । Ksh93 के पास कुछ बिल्डिंस के नाम से पहले विशेष प्रतीक हैं, आपको ^ *†*␣UTF-8 या ^ *-*␣ASCII में खोजना होगा । झूठी सकारात्मकता के एक जोड़े हैं, लेकिन यह आपको जल्दी से सही रेखा पर ले जाएगा। खोज के लिए ^ *read($| [-[])झूठी सकारात्मक की मात्रा कम कर देता है।

आप अपने पेजर को यह बताकर खोज को तेज़ कर सकते हैं कि आप कहाँ जाना चाहते हैं। उदाहरण के लिए PAGER='less "+/^ *read \["' man bash, readबेसिन के विवरण पर बैश मैन पेज को खोलता है । आप इसे एक समारोह बना सकते हैं:

man-builtin () {
  PAGER="less '+/^ *$1(\$|\\[|-)'" man ${SHELL##*/}
}

में mkshमैनपेज, / read (दो रिक्त स्थान, आदेश का नाम, एक अंतरिक्ष) आम तौर पर सही जगह है (यह एक चाल का उपयोग मैं अपने आप को है, और प्रकार के लिए जल्दी है) पाता है। इसके बारे में पूछने के लिए धन्यवाद; मैं अपने TODO पर mksh के साथ शामिल सभी उपयोगिताओं के लिए (कुछ) अलग संदर्भ बना रहा हूँ।
mirabilos

1
/ read जब आपका आदमी कार्यान्वयन पाठ को सही ठहराता है तो @mirabilos में बहुत सारी झूठी सकारात्मकताएँ होती हैं।
गिल्स एसओ- बुराई को रोकना '

माना। वास्तव में बिलिन डॉक्यूमेंटेशन से अलग होने का और भी कारण।
mirabilos

1

सीधे बैश मैन पेज के SHIL BUILTINS COMMANDS सेक्शन में सीधे कूदने के लिए, मैं अपनी $HOME/.bash_aliasesफाइल में निम्न उपनाम को परिभाषित करता हूं ।

alias man-builtin="man -P 'less -p ^SHELL\ BUILTIN\ COMMANDS' bash"

0

बस एक और विकल्प की पेशकश करने के लिए, यदि आप एक वेब ब्राउज़र का उपयोग करना पसंद करते हैं, जो आपको वर्तमान पृष्ठ के माध्यम से आसानी से खोज करने की अनुमति देता है, तो आप freeBSD.org पर उपयोग किए जाने वाले man.cgi जैसी किसी चीज़ का उपयोग कर सकते हैं, जो आपको विभिन्न प्रणालियों के मैन पेज देखने की सुविधा देता है कि कैसे देखें वे अलग हैं। मैंने अन्य साइटों पर भी ऐसा ही देखा है, इसलिए उम्मीद है कि आसपास अन्य विविधताएं हैं।

एप्रोपोस के तहत सहायता लिंक मैन पेज संग्रह को डाउनलोड करने के लिए लिंक के साथ अपने स्वयं के सर्वर पर डालने के लिए स्क्रिप्ट की एक प्रति प्राप्त करने के लिए कुछ जानकारी प्रदान करता है।


0

मैं इस उद्देश्य के लिए एक बश फ़ंक्शन बनाने के लिए तैयार हो गया। यह स्निपेट उदाहरण के अंत में चिपकाया जा सकता है ~/.bashrc:

manfind() {
  # required args
  test "$1" -a "$2" || return 1                  

  # create temp file and get its name
  local tmp=$(mktemp /tmp/manfindXXXXXX) || return 1
  ( # subshell for trap
    trap "rm $tmp" EXIT

    # grep all matching lines with line numbers and pipe them to dialog
    if man "$1" |                   # get the whole man page
      grep -n "^\s*$2" |            # grep for the search string, with line nums
      sed 's/:/\n/' |               # replace line num separator with newline for dialog
      cut -c-70  |                  # cut long lines to nice length
      xargs -d'\n' -n 999999 \
        dialog --output-fd 3 --menu "Select line to go to" 0 0 0 3>$tmp -- 1 '(start of man page)'
    then
      # selected line number is now in $tmp, get man page and
      # use vim in read only mode to view it at right line
      man "$1" | vim -R +"$(< $tmp)" -
    else
      # cancel selected from dialog
      exit 1
    fi
  )
}

टिप्पणियाँ थोड़ा सा समझाती हैं कि यह क्या करता है। विशेष खोजों में डिफ़ॉल्ट खोज स्ट्रिंग आरंभिक स्थान को छोड़ते हुए, लाइनों की शुरुआत से दिए गए शब्द हैं। उदाहरण:

# find every line which starts with 'read' followed by space
manfind bash 'read '
# research bash subshells
manfind bash '.*subshell'

नोट: इस स्क्रिप्ट में मैन पेज सेक्शन की कोई अवधारणा नहीं है ... मैं देखूंगा कि क्या मैंने बाद में इसे ट्वीक किया है, लेकिन मनुष्य केMANSECT पर्यावरण चर को सेट करने में मदद करता है।


2
आप अस्थायी फ़ाइल को साफ करने के लिए एक जाल जोड़ना चाह सकते हैं:trap 'rm -f "$tmp"'
l0b0

1
यह बहुत जटिल लगता है। मैंने पूरी तरह से नहीं पढ़ा है कि आपकी स्क्रिप्ट क्या करती है, लेकिन man "$1" | vim -R - "+/$2"ऐसा कुछ नहीं होगा ?
गिल्स एसओ- बुराई को रोकें

@ मुझे लगता है कि पहली घटना के लिए जाना जाएगा $2, तो नहीं।
हाईड

@ l0b0 बदलने के लिए क्लीनअप trap। मुझे एक सब-वेल्यू बनाए बिना इसे एक फंक्शन में करने का एक साफ तरीका नहीं मिला।
हाइड

@ मैं regex को स्वीकार कर रहा हूं कि आप क्या कर रहे हैं, निश्चित रूप से। मेरी बात का उपयोग करने के बारे में था+/REGEX
गिल्स एसओ- बुराई को रोकें '

0

यहाँ पर अन्य चर्चा के टुकड़ों को एक साथ रख कर यहाँ एक त्वरित कार्य किया जा सकता है .bashrcजिसे आप अपने में छोड़ सकते हैं जो आपको सीधे अंतर्निहित (यदि यह मौजूद है) में ले जाएगा। अन्यथा यह manसामान्य रूप से खुलता है:

man() {
    case "$(/bin/bash -c 'type -t '"$1")" in 
        builtin)
            LESS=+?"^       $1 " command -p man bash
            ;;
        *)
            command -p man $@
            ;;
    esac
}

0

किसी भी लिनक्स डिस्ट्रो से आप का उपयोग करने में सक्षम होना चाहिए info bashयदि आप अलग-अलग पैराग्राफों को कार्रवाई के प्रकार से चाहते हैं जहां जानकारी मानव पृष्ठों के समान है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.