2016-08-22 1 views
4

Ich habe ein Skript, die bashscp in folgenden Weise beginnt:Grund, Dateideskriptoren zu benutzen, die mit stdin verbunden sind, anstatt stdin direkt zu verwenden?

echo "${SCP_PASS:-$PASSWORD}" | (exec 3<&0; scp -qp ${SCP_PORT:+-P$SCP_PORT} -oStrictHostKeyChecking=yes -oPasswordFd=3 $TRANSFER_FILE "[email protected]$SCP_HOST:$SCP_PATH") 

Was ist der Sinn der exec 3<&0? Wie ich es verstehe, kopiert es die stdin in den Dateideskriptor 3. Warum ist das nötig? Warum nicht -oPasswordFd=0 verwenden?

Antwort

3

Es gibt keinen Vorteil hier Umleitung stdin auf FD3 - auch PasswordFd scheint keine openssh -Option sein - scheint der scp ausgeführt wird, ist ein Wrapper oder custom-built - im Allgemeinen, obwohl der Vorteil der Bereitstellung des Passwortes auf ein separater Dateideskriptor ist, um stdin offen für die Datenübertragung zu halten, die btw openssh scp nicht unterstützt

+0

@Martin: wissen Sie, woher Ihre 'scp' kam? – chicks

+0

@chicks Es ist auf Junos Betriebssystem. Mit anderen Worten, es ist wahrscheinlich ein benutzerdefinierter Build von 'scp'. – Martin

+0

Das macht Sinn - es ist möglich, dass diese benutzerdefinierte scp Eingabedaten auf stdin erlaubt – pakistanprogrammerclub