6

古いシェル スクリプトを見ていると、よくわからない行があります。

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

man ファイルから、-b がバッチ用であり、引数がバッチファイルであることが想定されていることがわかります。

この場合、バッチ ファイルは /dev/fd/3 (フロッピー ドライブ) にあるはずです。私はそれに到達できないようです。

これが何をすべきかについてのアイデアはありますか?

4

2 に答える 2

3

"/dev/fd*"ファイルは特別なデバイスです。これらは実際にはシステム上でそれほど多くのスペースを占めていません. それらは、プロセスがファイル記述子に番号でアクセスできるようにします。0,1,2標準input、 、standard outputおよびstandard 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ディレクトリの出力

[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

注:あなたの場合、入力ファイルは異なる可能性があります

于 2013-02-20T19:04:37.950 に答える
3

/dev/fd実際にはフロッピー ドライブではありません。「fd」は「ファイル記述子」を表します。man fdターミナルで試してみてください。

このページでは、何が起こっているかの概要を説明しています: http://lists.apple.com/archives/darwinos-users/2004/Apr/msg00042.html . 基本的に、SFTP が書き込む最初のファイル (おそらくダウンロードするファイル?) は、バッチ ファイルとして自身に戻されます。

スクリプト全体を見たり、SFTP の内部構造を知らなかったりしないと、何が起こっているのか正確にわかりません。スクリプトが接続するサーバーにはファイルのリストがあり、 /dev/fd/3 を使用してSFTPにリストをダウンロードさせ、再接続せずにファイルをダウンロードさせると思います。

于 2013-02-20T18:39:41.493 に答える