これは非常に基本的な質問です。私はbashを初めて使用するので、その方法を理解できませんでした。残念ながら、グーグルで移動することはできませんでした。
私の目標は、sftpを使用してサーバーに接続し、ファイルをアップロードしてから切断することです。
次のスクリプトがあります。
UpdateJar.sh
#!/bin/bash
sftp -oPort=23 [email protected]:/home/kalenpw/TestWorld/plugins
#Change directory on server
#cd /home/kalenpw/TestWorld/plugins
#Upload file
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar
exit
問題は、このスクリプトがsftp接続を確立し、その後何もしないことです。手動で「exit」と入力して接続すると、putコマンドを実行しようとしますが、sftpセッションが閉じられているため、put:コマンドが見つかりませんでした。
これを正しく機能させるにはどうすればよいですか?
ありがとう
ヒアドキュメントでコマンドを渡すようにスクリプトを変更できます。たとえば、
#!/bin/bash
sftp -oPort=23 [email protected]:/home/kalenpw/TestWorld/plugins <<EOF
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar
exit
EOF
<<
マーカーとそれに続く名前(EOF
)は、名前が(それ自体で)行の先頭で見つかるまで、後続の行を渡すようにスクリプトに指示します。
scp
の代わりにsftp
を使用することをお勧めします。 scp
は通常のcp
コマンドと同じように動作しますが、ファイルをリモートにすることもできます。
scp -P 23 /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar [email protected]:/home/kalenpw/TestWorld/plugins
これにより、古い学校のftpスタイルのコマンドインターフェイスを使用せずに、ローカルマシン上のファイルがリモートマシン上のディレクトリにコピーされます。
ssh
、scp
、およびsftp
サービスは、それらのいずれかが通常であれば利用可能です。同じデーモンプログラムがそれらすべてを同時に提供します。原則として、サーバーの管理者はそれらのいずれかを無効にすることを選択できますが、実際にはそれは非常にまれです。
sftp
の-b
オプションを使用して、sftp
のコマンドを含むファイルを示すこともできます。
たとえば、すべてのコマンドをファイルsftp_commands.txt
に入れることができます。
cd /home/kalenpw/TestWorld/plugins
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar
exit
sftp
を次のように実行します:
sftp -oPort=23 -b sftp_commands.txt [email protected]:/home/kalenpw/TestWorld/plugins
または、ファイルを使用したくない場合は、STDINを介してコマンドを渡すこともできます。
man sftp
から:
-bバッチファイル
バッチモードでは、stdinの代わりに入力バッチファイルから一連のコマンドを読み取ります。ユーザーとの対話がないため、非対話型認証と組み合わせて使用する必要があります。 「-」のバッチファイルは、標準入力を示すために使用できます。 sftpは、get、put、reget、rename、ln、rm、mkdir、chdir、ls、lchdir、chmod、chown、chgrp、lpwd、df、symlink、lmkdirのいずれかのコマンドが失敗すると中止されます。エラー終了は、「-」文字でコマンドを事前に修正することにより、コマンドごとに抑制できます(たとえば、-rm/tmp/blah *)。
別のオプションは curl を使用することです:
curl -u user -T file.tar sftp://example.com/home/user/