Um dies zu beheben Befehl einen Fehler in weniger mit der Feststellung Nr. von Parametern

StackOverflow https://stackoverflow.com/questions/1079853

  •  22-08-2019
  •  | 
  •  

Frage

Diese Frage beruht auf dieses Themas .

Der Code

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

Problem: , wenn ich auch nur eine Option verwenden, wird der Befehl nicht wissen, wo die wanted-Handbuch

Zum Beispiel

man -k find

ist mir ein Fehler, da die Referenz falsch. Der Befehl liest -k als Handbuch.

Mein Versuch, das Problem in Pseudo-Code

zu lösen
if no parameters
    run the initial code
if one parameter
    run: man "$2"
...

Mit anderen Worten, wir müssen einen Option-Scheck an den Anfang, so dass

hinzufügen

Pseudo-Code

    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 können Sie eine solche "Option-check", dass Sie den Wert von n $ verändern kann?

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

War es hilfreich?

Lösung

Wie wäre es, alle Argumente zu übergeben

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

Was ist der Fehler in weniger, die Sie im Titel erwähnt?

Andere Tipps

Erstens können Sie alle Ihre Funktion Argumente übergeben, indem Sie man oder $* $@. Sie können man sh für die genauen Details über den Unterschied zwischen den beiden lesen; Kurzgeschichte ist fast immer "$@" 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 "$@" | less
}

By the way, wenn Sie nur einen anderen Pager zu verwenden versuchen (man verwendet more und Sie möchten die Züchter less) gibt es eine allgemein anerkannte PAGER Umgebungsvariable, die Sie festlegen können, die Standard-Pager zu überschreiben. Man könnte dies zu Ihrem ~/.bashrc hinzufügen zum Beispiel 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önnen auch die shift Befehl hilfreich. Es umbenennt $2 $1, $3 $2, und so weiter. Es wird oft 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"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top