0

必要なときにパスワードを自動的に送信するリモートサーバーからSCPファイルにexpect/spawnとsendコマンドを使用してシェルを実現しました。

スクリプトはUNIXターミナルで正常に動作します。

それでも、C++プロセスでこのスクリプトを使用しようとしました。これは、system()またはpopen()関数によって呼び出されましたが成功しませんでした。このエラーが返されます: "ioctl(raw):I / O error"誰かが手がかりを持っている可能性がありますか?

これは私のスクリプトです:

 #!/bin/bash
 targetHost=$1
 password=$2
 sourceFile=$3

 destRep=$4       
 expect -c "        
        spawn /usr/bin/scp -q $targetHost:$sourceFile $destRep
        expect -i $spawn_id { 
          "*password:*" { send -i $spawn_id $password\r\n; interact } 
          eof { exit }
        }
        exit
        "
4

1 に答える 1

0

私が最初に試みることは、bashスクリプトを捨てることです(とにかく引用の問題があるようです)

#! /usr/bin/env expect -f
foreach {targetHost password sourceFile destRep} $argv break
spawn /usr/bin/scp -q $targetHost:$sourceFile $destRep
expect -i $spawn_id { 
    "*password:*" { send -i $spawn_id $password\r; interact } 
    eof { exit }
}

しかし、本当の問題は、stdioチャネル/ ptyがexpectプロセスによってどのように継承されるかです(ここでの適切な用語はわかりません)

于 2011-08-11T14:20:49.850 に答える