2013-02-20 5 views
5

ich bei einigen alten Shell-Skripten suchen und es gibt eine Linie, die ich nicht ganz verstehen:Was bedeutet die Option -b in SFTP tut

~]$ sftp -b /dev/fd/3 [email protected] 

ich von dem Mann kann sehen, dass Datei - b ist für Batch, und das Argument soll eine Batchdatei sein.

In diesem Fall sieht es so aus, als ob die Batch-Datei auf einem/dev/fd/3 - einem Diskettenlaufwerk sein soll? Ich komme nicht dazu.

Irgendwelche Ideen, was das tun soll?

Antwort

3

Die Dateien "/dev/fd*" sind spezielle Geräte. Diese benötigen nicht wirklich viel Platz auf Ihrem System. Sie ermöglichen einem Prozess, auf Dateideskriptoren nach Nummer zuzugreifen; 0,1,2 sind Standard input, standard output und standard error und andere offene Dateien beginnen mit 3

In Ihrem Fall sftp-b mit dem Befehl von /dev/fd/3

Beispiel zu lesen:

[[email protected] fd]# exec 3< /etc/resolv.conf 
[[email protected] fd]# cat /dev/fd/3 
search example.com 

nameserver 10.10.10.10 
nameserver 20.20.20.20 

Sie Daten lesen können read mit Befehl

[[email protected] fd]# read -u 3 a b 
[[email protected] fd]# echo $a $b 
nameserver 10.10.10.10 

Ausgabe von /dev/fd Directoy

[[email protected] fd]# ls -l /dev/fd/ 
total 0 
lrwx------ 1 root root 64 Feb 20 14:34 0 -> /dev/pts/0 
lrwx------ 1 root root 64 Feb 20 14:34 1 -> /dev/pts/0 
lrwx------ 1 root root 64 Feb 20 14:34 2 -> /dev/pts/0 
lr-x------ 1 root root 64 Feb 20 14:34 3 -> /etc/resolv.conf 

Hinweise: In Ihrem Fall, dass Eingabedatei anders sein könnte

3

/dev/fd ist eigentlich nicht das Diskettenlaufwerk - "fd" steht für "Dateideskriptor." Versuchen Sie man fd in einem Terminal.

Diese Seite gibt einen Überblick über die Vorgänge: http://lists.apple.com/archives/darwinos-users/2004/Apr/msg00042.html. Im Grunde wird die erste Datei, in die SFTP schreibt (vielleicht wird die Datei, die es herunterlädt?), Als Batch-Datei in sich selbst zurückübertragen.

Ohne das ganze Skript zu sehen oder die SFTP-Interna zu kennen, kann ich nicht genau sagen, was vor sich geht. Ich nehme an, dass es eine Liste von Dateien auf dem Server gibt, mit dem das Skript verbunden ist, und/dev/fd/3 wird verwendet, um SFTP zum Herunterladen der Liste zu erhalten, und lädt dann die Dateien ohne erneute Verbindung herunter.