Was ist der Dateideskriptor 10?

3730
Peter Mortensen

Was ist der Dateideskriptor 10?

Ein Beispiel aus der Praxis (bei dem die Standardausgabe ignoriert wird, der Standardfehler an die Standardausgabe umgeleitet wird und Daten vom Dateideskriptor 10 zur Standardausgabe umgeleitet werden). Ich habe die Dokumentation / den Kontext für Folgendes verloren:

./cluexec21nodes 'mkdir /home/mortense/sambapub;cd /home/mortense/sambapub;./runcola.sh >/dev/null 2>&1 10>&1 &' 

Die Standarddateideskriptoren sind

0 Standard Input (stdin) 1 Standard Output (stdout) 2 Standard Error (stderr) 

aber was ist der Dateideskriptor 10?

Dies wurde auf einem Linux-System (möglicherweise Red Hat) verwendet.

1
Die Hälfte des Befehls macht keinen Sinn. Es versucht, ein Skript aus einem Verzeichnis heraus auszuführen, das nur "mkdir" war ... grawity vor 12 Jahren 1
@grawity: Das mkdir usw. wurde auf jedem Knoten einer Anzahl in einem Linux-Cluster ausgeführt - der Befehl ist in 's eingeschlossen. Peter Mortensen vor 12 Jahren 0
Ich bin mir dessen bewusst. Ich habe gerade über den Teil "mkdir / home / mortense / sambapub; cd / home / mortense / sambapub; ./ runcola.sh" gesprochen. grawity vor 12 Jahren 0
@grawity: ja, du hast recht. Es war nicht gut durchdacht (wahrscheinlich ein Mix aus zwei verschiedenen Stufen). Peter Mortensen vor 12 Jahren 0

3 Antworten auf die Frage

3
Paul

Beyond the standard file descriptors there are 3-1024. These can be created in scripts with the

exec 10<> afilename 

From this point on, anything written to file descriptor 10 gets written to afilename

When you have

./script.sh 10>&1 

You are redirecting anything that would have gone to file descriptor 10 to stdout.

You'll want to review the runcola.sh script to see why it is doing this.

Die Syntax lautet `exec 10> afilename` in * sh *. grawity vor 12 Jahren 0
@ grawity: Kann nicht zu einem anderen Dateideskriptor in * sh * umgeleitet werden? Peter Mortensen vor 12 Jahren 0
@ Paul: Es war vielleicht eine willkürliche Konvention, die verwendet wurde, aber wenn sie für die Ausführung eines Befehls auf jedem Knoten in einem Linux-Cluster verwendet wurde, hat dies nichts damit zu tun (Netzwerkpipes?) . Ich werde trotzdem versuchen, die beiden Skripte zu finden. Peter Mortensen vor 12 Jahren 0
@Peter: Das ist mit "10> & 1" oder ähnlichem. grawity vor 12 Jahren 0
0
grawity

Dateideskriptoren sind nicht festgelegt. Das Programm kann sie beliebig verwenden. (Sogar fds 0-2 kann geschlossen, geöffnet und wiederverwendet werden.)

In diesem Fall scheint fd 10 beliebig gewählt zu sein; Es könnte sein, ./runcola.shdass es in der Lage sein wird, zusätzliche Informationen zu schreiben. Sie müssen das Skript selbst lesen, um es genau zu wissen.

0
Erik Bennett

Der Deskriptor 10 wird für Kommentare verwendet.

Wikipedia hat einen guten Einstiegsartikel bei File Descriptor . Es ist ein bisschen irreführend zu sagen, dass die shSyntax einen Deskriptor zu einem anderen umleitet. Feste Informationsquellen finden Sie in "Das Design des UNIX-Betriebssystems". Die Dokumentation zum System ruft dup(2)und dup2(2)verrät viel.

Grawity, Paul und andere (Sie wissen, wer Sie sind) kennen möglicherweise auch einige zusätzliche Ressourcen. Jungs?