これは非常に基本的な質問です。私は初めて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接続を確立しても何もしないことです。接続に手動で終了を入力すると、putコマンドを実行しようとしますが、sftpセッションが閉じられるため、put:command not findとのみ表示されます。
どうすれば正しく動作させることができますか?
ありがとう
答え1
このドキュメントのコマンドを渡すようにスクリプトを変更できます。たとえば、次のようになります。
#!/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
)を付けると、その名前(単独)が行の先頭に見つかるまで次の行を渡すようにスクリプトに指示します。
答え2
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
通常利用可能です(これらのいずれかが利用可能な場合)。同じデーモンがこれらすべての機能を同時に提供します。原則として、サーバー管理者はこれらのいずれかを無効にすることを選択できますが、実際にはそのようなケースはほとんどありません。
答え3
-b
オプションを使用してsftp
包含を示すこともできます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バッチファイル
バッチモードでは、標準入力ではなく入力バッチファイルから一連のコマンドを読み込みます。ユーザーの対話が不足しているため、非対話型認証で使用する必要があります。バッチファイル「-」を使用して標準入力を表すことができます。 get, put, reget, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, Symlink, lmkdir コマンドのいずれかが失敗すると、sftp は中断されます。 "-"文字を先頭に追加することで、コマンドごとのエラー終了を抑制できます(例:-rm /tmp/blah*)。
答え4
別のオプションは、次のものを使用することです。カール:
curl -u user -T file.tar sftp://example.com/home/user/