2017-11-28 1 views
0

私は2つのLinuxボックスを持っています。私はsftpを使って1台のマシンから他のマシンにファイルをアップロードしようとしています。私はターミナルで使用するすべてのコマンドを以下のようなスクリプトにします。sftpにアップロードするスクリプトが動作していません

#!/bin/bash 
cd /home/tests/sftptest 
sftp [email protected] 
cd sftp/sftptest 
put test.txt 
bye 

しかし、これは動作していないので、ディレクトリが存在しないようなエラーが表示されます。また、端末は> sftpのままです。つまり、実行されません。これをどうすれば解決できますか?

+0

ほとんどのFTPクライアントは、対話的に使用するように設計されています。 ['ncftp'](http://www.ncftpd.com/ncftp/)パッケージのプログラムは、ここではFTP転送を自動化するように設計されています。私はそれらを使用するほうがはるかに簡単です。 – John1024

+0

Sir Blaster AlfredΨさん、 'sftp'の代わりに' rsync'を見ることを強くお勧めします。それははるかに柔軟で能力があります(積極的に開発され、SAMBAを書く賢い人々によってあなたにもたらされます)。キーペアを作成して、2つのLinuxボックス間でパスワードなしのssh接続を可能にします。 'rsync'はファイル転送ソリューションのためのあなたのスイス軍ナイフです。 –

答えて

1

あなたがsftpコマンドを実行すると、それが接続し、あなたがコマンドを入力するのを待ちます。それは独自の「サブシェル」を開始します。

スクリプト内の他のコマンドは、sftpコマンドが終了すると一度だけ実行されます。そして、明らかにローカルシェルコマンドとして実行するので、特にputは存在しないコマンドとして失敗します。


あなたはsftpコマンドに直接sftpコマンドを提供しなければなりません。

これを行う1つの方法は、入力リダイレクトを使用することです。例えば。

sftp [email protected] -b sftp.txt 

sftp.txtスクリプトが含まれ、::

sftp_command_1 
sftp_command_2 

sftp [email protected] <<< EOF 
sftp_command_1 
sftp_command_2 
EOF 

その他の方法は、外部sftpスクリプトを使用している: "ここに文書" @cyrusによって答えはすでに示してを使用して

関連する問題