2012-04-20 6 views
6

Ich frage mich, wie Argumente, die einer Funktion in bash gegeben werden, ordnungsgemäß an eine andere Funktion oder ein anderes Programm "weitergeleitet" werden können.Wie kann man Argumente in bash richtig "weiterleiten"?

In Mac OS X gibt es beispielsweise ein Befehlszeilenprogramm open (man page), das die angegebene Datei mit ihrer Standardanwendung öffnet (dh eine * .h-Datei in Xcode oder einen Ordner im Finder öffnet). etc). Ich möchte einfach open ohne Argumente aufrufen, um das aktuelle Arbeitsverzeichnis im Finder zu öffnen, oder es die typischen Argumente zur Verfügung stellen, um es normalerweise zu verwenden.

Ich dachte, "Ich werde nur eine Funktion verwenden!" Hah, nicht so schnell dort, nehme ich an. Hier ist, was ich habe:

function open 
{ 
    if [ $# -eq 0 ]; then 
     /usr/bin/open . 
    else 
     /usr/bin/open "$*" 
    fi 
} 

Einfach telefonieren open funktioniert gut, es öffnet sich das Arbeitsverzeichnis in Finder. Rufen Sie open myheader.h funktioniert gut, es öffnet "myheader.h" in Xcode.

Aufruf open -a /Applications/TextMate.app myheader.h, um zu versuchen, die Datei in TextMate anstelle von Xcode zu öffnen, führt jedoch zu dem Fehler "Kann Anwendung nicht finden" /Applications/TextMate.app myheader.h '". Es scheint passieren "$*" zu /usr/bin/open wird verursacht, dass meine gesamte Argumentliste als nur ein Argument stattdessen weitergeleitet wird.

Die Änderung der Funktion usr/bin/open $* (keine Angabe) führt zu Problemen in Pfaden mit Leerzeichen. Der Aufruf von open other\ header.h führt dann zu dem Fehler "Die Dateien/Users/inspector-g/other und /Users/inspector-g/header.h existieren nicht", löst aber das andere Problem.

Es muss eine Konvention für die Weiterleitung von Argumenten geben, die ich gerade verpasse.

Antwort

9

Sie haben in der Tat "[email protected]" verpasst, die für diesen Fall ausgelegt ist.

+0

Arbeitete wie ein Charme, vielen Dank. Es gibt nur so viele dieser '$' vars! –

+0

In der Tat '$ *' funktioniert, wenn Sie Argumente innerhalb einer Zeichenfolge weiterleiten müssen (z. B. 'mosel -s -c" exec $ * "') –

Verwandte Themen