web-dev-qa-db-ja.com

"spawn" Linuxシェルコマンドの意味は何ですか? (Centos6)

リモートサーバーに自動的に接続してディレクトリを変更し、そのディレクトリ内のすべてのファイルをローカルに取得するcronジョブをセットアップする方法を知る必要があります。

私はsftpを使用する必要があると思いますが、いくつかのシェルスクリプトで「spawn」と呼ばれるいくつかのコマンドを見つけました。

spawn  sftp user@ipaddress
cd xxx/inbox
mget *

これは、ダウンロードするリモートディレクトリのコンテキストで機能しますか?

9
user1179459

あなたの場合、spawnはおそらく expect スクリプト言語のコマンドであり、インタラクティブなプログラム操作の自動化を可能にします。このような場合、spawnは、expectスクリプトから外部コマンドを実行します。スクリプトの例には、 Shebang シーケンスがありません(#!で始まる最初の行)、 expectインタープリターを示すため、直接実行してもexpectによって解釈されません。

sftpを使用したパスワード認証は、対話モードに限定されています。対話モードでsftpを制御するには、次の予期スクリプトの例を使用できます。

#!/usr/bin/env expect
set timeout 20    # max. 20 seconds waiting for the server response

set user username
set pass your-pass
set Host the-Host-address
set dir  server-dir

spawn sftp $user@$Host
expect assword:

send "$pass\r"
expect sftp>

send "cd $dir\r"
expect sftp>

send "mget *\r"
expect sftp>

send "exit\r"
expect eof

もう1つの可能性は、より安全な公開鍵認証を使用することです( 公開鍵認証を使用するようにSFTPを設定する を参照)。そのような場合、単純にsftpをバッチモードで直接使用できます。

#!/bin/sh
user=username
Host=the-Host-address
dir=server-dir

sftp -b - "$user@$Host" <<+++EOF+++
cd "$dir"
mget *
exit
+++EOF+++
8
pabouk