私のスクリプトでは、sftp 接続を作成します。
以前にユーザーからいくつかのディレクトリ値を読み取り、sftp 接続が確立されたら、ユーザーから取得したそのディレクトリに cd しようとしました。
しかし、おそらく、SFTP接続が確立されたサーバー内にプロンプトが表示されるため、機能していません。
この場合、どのように機能させるのですか?
このページのどこかで述べているように、スクリプトがそうする場合、
sftp $user@$host cd $directory
次に、次のような別のことを試みます。
sftp $user@$host FOO
SFTPサーバーへの新しい接続を作成する新しいコマンドを実行しているため、そのコマンドFOO
は同じディレクトリでは実行されません。$directory
できることは、sftp の「バッチファイル」オプションを使用することです。つまり、1 つの接続で sftp に実行させたいすべてのコマンドを含むファイルを作成します。たとえば、次のようになります。
$ cat commands.txt
cd foo/bar
put foo.tgz
lcd /tmp/
get foo.tgz
次に、次のコマンドを実行して、これらのコマンドを 1 つの接続で実行するように sftp に指示できます。
sftp -b commands.txt $user@$host
だから、私はあなたの解決策を次のように提案します:
スクリプトは次のようになります。
echo "Directory in which to go:"
read directory
temp=$( mktemp /tmp/FOOXXX )
echo "" > $temp
echo "cd $directory" >> $temp
# other commands
sftp -b $temp $user@$host
rm $temp
マシンのディレクトリを変更しようとしている場合は、lcd を試してください。
それはどのように機能していませんか?リモート サーバーのディレクトリを変更するには、「cd」コマンドを使用します。ローカル サーバー上のディレクトリを変更するには、「lcd」コマンドを使用します。「man sftp」と読みます。