在我的脚本中 - 我创建了一个sftp连接。
我之前从用户那里读了一些目录值,一旦建立了sftp连接,我尝试cd到我从用户那里获得的那个目录。
但是它不起作用,可能是因为提示进入了建立SFTP连接的服务器。
在这种情况下如何使它工作?
答案 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
所以,我建议你的解决方案是:
您的脚本会执行以下操作:
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”。