4

在我的脚本中 - 我创建了一个 sftp 连接。

我之前从用户那里读取了一些目录值,一旦建立了 sftp 连接,我尝试 cd 到我从用户那里获得的那个目录。

但它不起作用,可能是因为提示进入了建立 SFTP 连接的服务器内部。

在这种情况下如何使它工作?

4

4 回答 4

5

我也遇到了这个问题并且能够找到解决方案。解决方案就在 sftp 的手册页中。在手册页中,您会找到使用 sftp 的格式,如下所示:

sftp [options] [user@]host[:dir[/]]

实际上,那里提供了两种格式,但这是我想使用的一种并且它有效。

所以你会怎么做?您只需提供username@host那里看到的,然后,后面没有任何空格:以及您要在脚本中的客户端/远程服务器中更改的路径,仅此而已。这是一个实际的例子:

sftp user@host:/path/ 
于 2018-10-19T13:54:26.650 回答
2

如果您的脚本确实如此,正如您在本页某处所述,

sftp $user@$host cd $directory

然后尝试做其他事情,例如:

sftp $user@$host FOO

该命令FOO不会在同一目录中执行,$directory因为您正在执行一个新命令,这将创建一个到 SFTP 服务器的新连接。

您可以做的是使用 sftp 的“batchfile”选项,即构建一个文件,其中包含您希望 sftp 通过一个连接执行的所有命令,例如:

$ cat commands.txt
cd foo/bar
put foo.tgz
lcd /tmp/
get foo.tgz

然后,您将能够通过执行以下命令告诉 sftp 在一个连接中执行这些命令:

sftp -b commands.txt $user@$host

所以,我建议你的解决方案是:

  • 根据用户的输入,创建一个临时文本文件,其中包含要通过一个 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 回答