我有一个bash
脚本,以以下方式启动scp
:
echo "${SCP_PASS:-$PASSWORD}" | ( exec 3<&0; scp -qp ${SCP_PORT:+-P$SCP_PORT} -oStrictHostKeyChecking=yes -oPasswordFd=3 $TRANSFER_FILE "$SCP_USER@$SCP_HOST:$SCP_PATH" )
exec 3<&0
的意义是什么?据我所知,它将stdin
复制到文件描述符3
。为什么需要这样做?为什么不用-oPasswordFd=0
呢?
将stdin重定向到fd_3没有任何好处-而且PasswordFd似乎不是openssh选项-似乎正在运行的scp是包装器或定制的-一般来说,尽管在单独的文件描述符上提供密码的好处是保持stdin打开以进行数据传输,而openssh scp不支持