2016-08-22 5 views
4

У меня есть bash скрипт, который запускает scp в следующим образом:Причина использования файловых дескрипторов Связано с stdin Вместо использования stdin Непосредственно?

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") 

Какова точка exec 3<&0? Как я понимаю, он копирует stdin в дескриптор файла 3. Почему это необходимо? Почему бы не использовать -oPasswordFd=0?

ответ

3

Здесь нет никакой пользы для перенаправления stdin на fd 3 - также PasswordFd, похоже, не является параметром openssh - кажется, что scp, который запускается, является оберткой или нестандартно - вообще, хотя преимущество предоставления пароля на отдельный файловый дескриптор должен держать stdin открытым для передачи данных, который btw openssh scp не поддерживает

+0

@Martin: вы знаете, откуда пришел ваш «scp»? – chicks

+0

@chicks Это на операционной системе Junos. Другими словами, это, вероятно, обычная сборка 'scp'. – Martin

+0

Это имеет смысл - возможно, этот пользовательский scp позволяет вводить данные на stdin – pakistanprogrammerclub