0

scpコマンドを自動化し、scpコマンドのステータスを返すexpectスクリプトを作成しようとしています。私はecpectスクリプトを初めて使用するため、これを実行する方法を見つけることができません。私が必要としているのは、expectスクリプトを使用してSCPコマンドを自動化することです。これは、scpが成功した場合はコード0で終了し、それ以外の場合は、ファイルの転送中に接続タイムアウトやリンクダウンなどのエラーで戻ります。

これについて私を助けてください。

以下は私のスクリプトスニペットです:

# connect via scp
spawn scp -o ConnectTimeout=30 /home/user/file.tar.gz root@192.168.1.146:/home/user

    #######################
    expect {
          -re ".*es.*o.*" {
                  exp_send "yes\r"
                          exp_continue
                            }
            -re ".*sword.*" {
                    exp_send "abc\r"
                          }
    }
    interact
4

1 に答える 1

1

あなたはwaitコマンドの後です。期待するマンページからのコピー:

   wait [args]
         delays until a spawned process (or the current process if none is
         named) terminates.

         wait normally returns a list of four integers.  The first integer
         is the pid of the process that was waited upon.  The second inte-
         ger is the corresponding spawn id.  The third integer is -1 if an
         operating system error occurred, or 0 otherwise.   If  the  third
         integer  was  0, the fourth integer is the status returned by the
         spawned process.  If the third integer was -1, the fourth integer
         is  the  value  of errno set by the operating system.  The global
         variable errorCode is also set.

         Additional elements may appear at the end  of  the  return  value
         from  wait.   An  optional  fifth  element  identifies a class of
         information.  Currently, the only possible value for this element
         is  CHILDKILLED in which case the next two values are the C-style
         signal name and a short textual description.

         The -i flag declares the process to  wait  corresponding  to  the
         named  spawn_id  (NOT the process id).  Inside a SIGCHLD handler,
         it is possible to wait for any spawned process by using the spawn
         id -1.

         The  -nowait  flag causes the wait to return immediately with the
         indication of a successful wait.  When the process exits (later),
         it  will automatically disappear without the need for an explicit
         wait.

         The wait command may also be used wait for a forked process using
         the  arguments  "-i  -1".  Unlike its use with spawned processes,
         this command can be executed at any time.  There  is  no  control
         over  which  process is reaped.  However, the return value can be
         checked for the process id.

これには、生成されたサブプロセス(この場合は scp )またはそれに含まれるサブプロセスによって生成された出力は含まれません。これは、デフォルトで、 および を介して使用する仮想端末に送信さexpectinteractます。タイムアウトとファイル終了イベントは、 /へのtimeoutandeof節を介してより適切に処理される可能性があります。expectinteract

于 2013-02-08T11:14:41.583 に答える