2009-07-03 9 views
0

Diese Frage basiert auf this thread.Um einen Fehler in Less 'Befehl zu beheben, indem no. No.

Der Code

function man() 
{  
    man "$1" > /tmp/manual; less /tmp/manual 
} 

Problem:, wenn ich auch nur eine Option verwenden, wird der Befehl nicht weiß, wo ist die

Zum Beispiel-Handbuch wollte

man -k find 

gibt mir einen Fehler, da die Referenz falsch ist. Der Befehl lautet -k als Handbuch.

Mein Versuch, das Problem in Pseudo-Code

if no parameters 
    run the initial code 
if one parameter 
    run: man "$2" 
... 

Mit anderen Worten zu lösen, brauchen wir eine Option überprüfen zu Beginn, so dass

Pseudo-Code

hinzufügen
man $optional-option(s) "$n" > /tmp/manual; less /tmp/manual 

wobei $ n

  • n = 1, wenn Null Optionen
  • n = 2, wenn 1 Option
  • n = 3, wenn zwei Optionen
  • ....

Wie kann man eine solche „Option machen -Überprüfen Sie, "dass Sie den Wert von $ n ändern können?

Entwickelt Problem: zwei zu machen, wenn Schleifen für die Situationen von n = 1 bis n = 2

+0

@ Vielen Dank für Ihre Antworten! –

Antwort

2

Wie wäre es

function man() 
{  
    man [email protected] > /tmp/manual; less /tmp/manual 
} 

alle Argumente zu übergeben Was der Fehler in weniger denen Sie erwähnen im Titel?

+0

$ @ sollte wahrscheinlich zitiert werden. Andernfalls könnte "man" one two "" als "man one two" interpretiert werden. –

1

Zuerst können Sie alle Argumente Ihrer Funktion an man übergeben, indem Sie $* oder [email protected] verwenden. Sie können man sh für die genauen Details über den Unterschied zwischen den beiden lesen; Kurzgeschichte ist fast immer "[email protected]" mit doppelten Anführungszeichen zu verwenden.

Zweitens ist die temporäre Datei nicht erforderlich. Sie könnten diese ein wenig sauberer machen, indem die Ausgabe von man direkt an less kochend:

function man() { 
    man "[email protected]" | less 
} 

By the way, wenn Sie nur einen anderen Pager zu verwenden versuchen (man verwendet more und Sie möchten die Züchter less) Es gibt eine allgemein anerkannte Umgebungsvariable PAGER, die Sie festlegen können, um den Standardpager zu überschreiben.Sie können dies auf Ihre ~/.bashrc zum Beispiel hinzufügen, alle Programme zu sagen less zu verwenden, wenn mehrere Bildschirme der Ausgabe angezeigt wird:

export PAGER=less 

Um Ihre genaue Frage zu beantworten, können Sie die Anzahl der Argumente mit $# überprüfen:

if [ $# -eq 0 ]; then 
    : # No arguments 
elif [ $# -eq 1 ]; then 
    : # One argument 
# etc. 

Sie könnten auch den shift Befehl hilfreich finden. Es benennt $2 zu $1, $3 zu $2 um, und so weiter. Es wird häufig in einer Schleife verwendet, um Befehlszeilenargumente nacheinander zu verarbeiten:

while [ $# -gt 1 ]; do 
    echo "Next argument is: $1" 
    shift 
done 

echo "Last argument is: $1" 
+0

Das $ * funktioniert nicht in OS/X. –

+0

Ich bin auf einem Mac und es funktioniert. Sie brauchen nur eine SH-kompatible Shell. –