4

私のスクリプトでは、sftp 接続を作成します。

以前にユーザーからいくつかのディレクトリ値を読み取り、sftp 接続が確立されたら、ユーザーから取得したそのディレクトリに cd しようとしました。

しかし、おそらく、SFTP接続が確立されたサーバー内にプロンプ​​トが表示されるため、機能していません。

この場合、どのように機能させるのですか?

4

4 に答える 4

2

このページのどこかで述べているように、スクリプトがそうする場合、

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

だから、私はあなたの解決策を次のように提案します:

  • ユーザーの入力により、1 つの SFTP 接続で実行されるすべてのコマンドを含む一時テキスト ファイルを作成し、次に
  • その一時テキスト ファイルを「バッチ ファイル」として使用して sftp を実行します。

スクリプトは次のようになります。

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
于 2012-07-05T15:56:44.607 に答える
1

マシンのディレクトリを変更しようとしている場合は、lcd を試してください。

于 2012-07-05T14:48:20.347 に答える
-1

それはどのように機能していませんか?リモート サーバーのディレクトリを変更するには、「cd」コマンドを使用します。ローカル サーバー上のディレクトリを変更するには、「lcd」コマンドを使用します。「man sftp」と読みます。

于 2012-07-05T14:48:18.873 に答える