-b选项在SFTP中的作用是什么

时间:2013-02-20 18:24:58

标签: linux shell unix solaris sftp

我正在查看一些旧的shell脚本,有一行我不太明白:

~]$ sftp -b /dev/fd/3 dropuser@targetftpserver.company.com

我可以从man文件中看到-b是批处理的,并且该参数应该是一个批处理文件。

在这种情况下,看起来批处理文件应该在/ dev / fd / 3上 - 一个软盘驱动器?我似乎无法达到它。

任何想法应该做什么?

2 个答案:

答案 0 :(得分:3)

/dev/fd实际上不是软驱 - “fd”代表“文件描述符”。在终端中尝试man fd

此页面概述了正在发生的事情:http://lists.apple.com/archives/darwinos-users/2004/Apr/msg00042.html。基本上,SFTP写入的第一个文件(可能是它下载的文件?)作为批处理文件传回自身。

如果没有看到整个脚本或了解SFTP的内部结构,我无法确切地知道发生了什么。我猜这个脚本连接的服务器上有一个文件列表,而/ dev / fd / 3用于让SFTP下载列表,然后下载文件而不重新连接。

答案 1 :(得分:3)

"/dev/fd*"个文件是特殊设备。这些并没有真正占用您系统上的那么多空间。它们允许进程按编号访问文件描述符; 0,1,2为标准inputstandard outputstandard error,其他打开文件以3

开头

在你的情况sftp使用-b/dev/fd/3读取命令

示例:

[root@04 fd]# exec 3< /etc/resolv.conf
[root@04 fd]# cat /dev/fd/3
search example.com 

nameserver 10.10.10.10
nameserver 20.20.20.20

您可以使用read命令

读取数据
[root@04 fd]# read -u 3 a b
[root@04 fd]# echo $a $b
nameserver 10.10.10.10

/dev/fd directoy

的输出
[root@04 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

注意:在您的情况下输入文件可能不同

相关问题