在我的脚本中 - 我创建了一个 sftp 连接。
我之前从用户那里读取了一些目录值,一旦建立了 sftp 连接,我尝试 cd 到我从用户那里获得的那个目录。
但它不起作用,可能是因为提示进入了建立 SFTP 连接的服务器内部。
在这种情况下如何使它工作?
我也遇到了这个问题并且能够找到解决方案。解决方案就在 sftp 的手册页中。在手册页中,您会找到使用 sftp 的格式,如下所示:
sftp [options] [user@]host[:dir[/]]
实际上,那里提供了两种格式,但这是我想使用的一种并且它有效。
所以你会怎么做?您只需提供username@host
那里看到的,然后,后面没有任何空格:
以及您要在脚本中的客户端/远程服务器中更改的路径,仅此而已。这是一个实际的例子:
sftp user@host:/path/
如果您的脚本确实如此,正如您在本页某处所述,
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
如果您正在尝试更改机器的目录,请尝试 lcd
它以什么方式不起作用?要更改远程服务器上的目录,请使用“cd”命令。要更改本地服务器上的目录,请使用“lcd”命令。阅读“man sftp”。