web-dev-qa-db-ja.com

個々のコマンド間の遅延を伴う.batファイルを使用したPuTTYを使用してシリアルポート経由で複数のコマンドを実行

send.bat:

plink -load test < commands.txt

(テストはPuTTYに保存されたセッションです)

enter image description here

コマンド.txt

echo set_zero
timeout /t 3 /nobreak >nul 2>&1
pause >nul 2>&1
echo set_a 65535
pause >nul 2>&1
timeout /t 3 /nobreak >nul 2>&1
echo set_a 0
timeout /t 3 /nobreak >nul 2>&1
pause >nul 2>&1

Send.batを実行すると、PuTTYを正常に開くことができますが、commands.txtに書き込んだコマンドを入力できません。

enter image description here

これらのファイルを同じディレクトリに置きます。 enter image description here

1
yong.cheng

あなたのcommands.txtファイルはただの混乱です。

set_zeroコマンドではなくecho set_zeroコマンドを送信することを想定しているので、set_zeroではなくecho set_zeroをファイルに配置します。

ただし、コマンド間で一時停止する必要がある場合は、timeoutコマンドを使用できないため、単純な入力リダイレクトは役に立ちません。シリアルポートに送信しているときに、ローカルでtimeoutコマンドを実行したい。 plinkの入力を生成するスクリプトとして使用した場合、コードは実際には正しいです。ただし、そのためには、|ではなく<を使用する必要があります。

これはあなたが望むことをするかもしれません:

(
    echo set_zero
    timeout /t 3 /nobreak >nul 2>&1
    pause >nul 2>&1
    echo set_a 65535
    pause >nul 2>&1
    timeout /t 3 /nobreak >nul 2>&1
    echo set_a 0
    timeout /t 3 /nobreak >nul 2>&1
    pause >nul 2>&1
) | plink -load test

ただし、pauseの後にのみplinkを移動することをお勧めします。

(
    ...
    echo set_a 0
    timeout /t 3 /nobreak >nul 2>&1
) | plink -load test

pause >nul 2>&1

または、@ Appleodityがすでに提案しているように、commands.txtの名前をcommands.batに変更し、次のように使用します。

commands.bat | plink -load test

繰り返しますが、おそらく次のようになります(pausecommands.batから移動した後):

commands.bat | plink -load test

pause >nul 2>&1
1
Martin Prikryl

ドキュメントによると、正しい使用法は次のとおりです。

plink -load test -m commands.txt

-m =ファイルからリモートコマンドを読み取ります。

https://www.ssh.com/ssh/PuTTY/putty-manuals/0.68/Chapter7.html#plink-usage

ただし、これらのコマンドが何に使用されているのか疑問に思っています。 commands.txtファイルの内容は別のバッチファイルであり、そのファイルが実行され、出力がシリアルポートに送られることを期待しているように見えます。

それはそれがどのように機能するかではありません。 commands.txtのリテラルコンテンツがシリアルポートに送信されているため、すべての無効なコマンドエラーが発生する可能性があります。

commands.txtの内容を実行して出力をシリアルポートに送信する場合は、commands.txtの名前をcommands.batに変更し、次のコマンドを使用して出力をplinkにパイプする必要があります。commands.bat | plink -load test

0
Appleoddity