如何在使用Shell脚本建立连接的SFTP连接中进行CD

时间:2012-07-05 14:40:42

标签: shell unix sftp

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

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

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

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

4 个答案:

答案 0 :(得分:2)

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

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

实际上,这里给出了两种格式,但这是我想要使用的一种并且有效。

那么,你怎么办?您只需提供username@host,如此处所示,然后在脚本中的客户端/远程服务器中不带任何空格,后跟:和要更改的路径即可。这是一个实际的例子:

sftp user@host:/path/ 

答案 1 :(得分:1)

如果您要更改本机的目录,请尝试使用lcd

答案 2 :(得分:1)

如果你的脚本确实存在,就像你在本页的某个地方所说的那样,

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

答案 3 :(得分:-1)

它以什么方式不起作用?要更改远程服务器上的目录,请使用“cd”命令。要更改本地服务器上的目录,请使用“lcd”命令。阅读“man sftp”。