2013-02-20 13 views
5

で何をするのか、私はいくつかの古いシェルスクリプトを見ていると私はかなり理解していない行があります:私はその男のファイルから見ることができます-bオプションはSFTP

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

は - bはバッチ用であり、引数はバッチファイルであると仮定します。

この場合、バッチファイルは/ dev/fd/3にあるはずです - フロッピードライブですか?私はそれを得ることができない。

これは何をする予定ですか?

答えて

3

"/dev/fd*"ファイルは特殊なデバイスです。これらは実際にあなたのシステム上の多くのスペースを占めているわけではありません。彼らは、プロセスがファイル記述子に番号でアクセスすることを許可します。 0,1,2inputstandard outputstandard error、標準であり、他の開いているファイルは/dev/fd/3

例からコマンドを読み取るために-bを使用して、あなたの場合sftp3

で始まる:あなたはreadを使用してデータを読み取ることができ

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

コマンド

[[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の内部全体を見たり、SFTPの内部を知ることなく、何が起こっているのかを正確に知ることはできません。私は、スクリプトが接続するサーバー上のファイルの一覧があると思います。/ dev/fd/3は、リストをダウンロードして再接続せずにSFTPをダウンロードしてダウンロードするために使用されます。