2013-02-20 61 views
5

我在看一些老shell腳本和有一條線,我不太明白這樣做:是什麼-b選項在SFTP

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

我可以從該名男子看到文件 - b用於批處理,並且該參數應該是批處理文件。

在這種情況下,它看起來像批處理文件應該在/ dev/fd/3上 - 一個軟盤驅動器?我似乎無法做到。

任何想法這應該做什麼?

回答

3

"/dev/fd*"文件是特殊設備。這些並沒有真正佔用您系統上的太多空間。它們允許進程通過數字訪問文件描述符; 0,1,2是標準inputstandard outputstandard error,等打開的文件開始3

在你的情況sftp使用-b/dev/fd/3

讀取示例命令:

[[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 

可以使用read讀取數據命令

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

輸出/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 

注意事項:在你的情況下輸入文件可以是不同的

3

/dev/fd實際上並不是軟盤驅動器 - 「fd」代表「文件描述符」。在終端中嘗試man fd

本頁概述了發生了什麼事情:http://lists.apple.com/archives/darwinos-users/2004/Apr/msg00042.html。基本上,SFTP寫入的第一個文件(可能是它下載的文件?)將作爲批處理文件傳回給自己。

沒有看到整個腳本或知道SFTP的內部,我無法確切地知道發生了什麼。我猜想腳本連接到的服務器上有一個文件列表,而/ dev/fd/3用於讓SFTP下載列表,然後下載文件而不重新連接。