2016-07-01 13 views
2

Ich habe ein Problem. Ich schrieb ein Programm, wo ich einige Argumente validieren muss, die mit der Befehlszeile übergeben wurden (ich verwende argv[]) und eine Datei zu verwenden, die auf stdin als Eingabe umgeleitet wird. Das Programm funktioniert, aber ich habe Probleme, wenn es keinen Platz zwischen den Argumenten und der Umleitung des normal Bash falsches Verhalten, wenn es keinen Platz beetwen Args und Umleitung

as ./aout -s 30 20< ficso 

ist

ist? Ich dachte, das Zeichen < wurde von der Bash reserviert.

Dank

Antwort

4

Eine Reihe direkt gegen einen Umleitungsoperator wie folgt verwandelt es sich in einen anderen Umleitungsoperator, in diesem Fall ein gesetzt, die seine Eingabe von FD 20 anstelle von FD 0

+0

@xax: nur klar zu sein, FD in diesem Zusammenhang File Descriptor bedeutet. Zum Beispiel ist FD 0 bekannt als stdin (Standardeingabe), 1 ist stdout (Standardausgabe) und 2 ist stderr (Standardfehler). Eine allgemeine Verwendung einer FD ist '2> err.txt', die stderr in die" err.txt "-Datei umleitet. Die Umleitung '<' ist eigentlich '0 <', aber FD 0 ist der Standardwert. – cdarke

+0

Ich verstehe. Ich werde versuchen, anders damit umzugehen. Vielen Dank. – xax

3

Wenn Sie nimmt schreiben

20< filename 

bedeutet es, dass an Stelle der Standardeingabe des Umleitens (Dateideskriptor 0) in die Datei sollte es Dateideskriptor 20 in die umzuleiten.

Vom manual

3.6.1 Umleiten Eingangs

Redirection von Eingangs bewirkt, dass die Datei, deren Name ergibt sich aus der Erweiterung der Wort zum Lesen auf Dateideskriptor geöffnet werden n oder die Standardeingabe (Dateideskriptor 0), wenn n nicht angegeben ist.

Das allgemeine Format für die Eingabe Umleitung ist:

[n]<word