古いシェル スクリプトを見ていると、よくわからない行があります。
~]$ sftp -b /dev/fd/3 dropuser@targetftpserver.company.com
man ファイルから、-b がバッチ用であり、引数がバッチファイルであることが想定されていることがわかります。
この場合、バッチ ファイルは /dev/fd/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
注:あなたの場合、入力ファイルは異なる可能性があります
/dev/fd
実際にはフロッピー ドライブではありません。「fd」は「ファイル記述子」を表します。man fd
ターミナルで試してみてください。
このページでは、何が起こっているかの概要を説明しています: http://lists.apple.com/archives/darwinos-users/2004/Apr/msg00042.html . 基本的に、SFTP が書き込む最初のファイル (おそらくダウンロードするファイル?) は、バッチ ファイルとして自身に戻されます。
スクリプト全体を見たり、SFTP の内部構造を知らなかったりしないと、何が起こっているのか正確にわかりません。スクリプトが接続するサーバーにはファイルのリストがあり、 /dev/fd/3 を使用してSFTPにリストをダウンロードさせ、再接続せずにファイルをダウンロードさせると思います。