4

zsshと呼ばれる気の利いた小さなツールがあり 、lszrzユーティリティを 使用 して、既存のssh接続を介してzmodemを使用してファイルを簡単に 転送できます。意外と便利ですが…でも、を使って同じことができるはずなのですexpect。私はここまで来ました...

#!/usr/bin/expect -f

spawn ssh $argv
set ssh_spawn_id $spawn_id
send_user "ssh is: $ssh_spawn_id\n"

interact -o "\030B0000" {
    send_user "\nStarting zmodem receive.\n"

    spawn rz -v
    set rz_spawn_id $spawn_id
    send_user "rz is: $rz_spawn_id\n"

    while {1} {
        expect {
            eof break

            -i $rz_spawn_id -re .+ {
                send -raw -i $ssh_spawn_id $expect_out(buffer)
            }
            -i $ssh_spawn_id -re .+ {
                send -raw -i $rz_spawn_id $expect_out(buffer)
            }
        }
    }

    send_user "\nFinished zmodem receive.\n"
    set spawn_id $ssh_spawn_id
}

rzこれはフレームを見た後に起動しZRQINIT、明らか rzにsshセッションに接続しますが、機能しません。 rz言う:

Retry 0: Bad CRCe.**B0100000023be50
Retry 0: Bad CRC**B0600000023d984
Retry 0: Bad CRC**B0600000023d984

...など。

これを機能させる方法はありますか?ありがとう!

4

2 に答える 2

4

-e送信側で/ --escape(すべての制御文字をエスケープする) オプションを使用すると、zmodem 接続の開始時に発生するいくつかの問題を解決できることがわかりました。

例えば:

送信ファイル:

sz -e somefile.ext

受信ファイル:

rz -e

これは、IPMI sol (serial-over-lan) リンクを介してファイルを転送する場合に便利です。

OSX にはiterm2-zmodemがあり、Linux には Zmodem が統合された Konsole があります。

于 2014-03-10T12:15:58.040 に答える