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

问题描述:

在我的脚本中 - 我创建了一个sftp连接。如何在建立连接的SFTP连接中使用CD - Shell脚本

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

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

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

+1

SFTP协议没有“当前目录”的概念,因此你不能在任何地方“cd”。控制台SFTP客户端在内部模拟类似于chdir的命令。 – 2012-07-05 15:39:35

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

+0

如果这是我的脚本的一部分sftp $ uid @ $ ip cd $ path - 一旦执行了sftp命令,提示会转到执行sftp命令的服务器。所以它不会在脚本的下一行中执行cd/lcd命令 – vvshack 2012-07-05 14:56:44

如果你正在试图改变机器的目录,尝试LCD

+0

如果这是我的脚本的一部分sftp $ uid @ $ ip cd $ path - 一旦执行了sftp命令,提示会进入服务器在其上执行sftp命令。所以它没有在脚本的下一行执行cd/lcd命令 – vvshack 2012-07-05 14:53:43

如果您的脚本做,因为你的地方状态,在此页面,

sftp [email protected]$host cd $directory 

,然后尝试做别的事情,像:

sftp [email protected]$host FOO 

该命令FOO在同一目录执行,因为您正在执行新的命令,它将创建到SFTP服务器的新连接。

你可以做的是使用SFTP的“批处理文件”选项,即构建一个文件它包含所有你想SFTP做了一个连接,例如命令:

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

然后,你就可以告诉SFTP连接于一体,以执行这些命令,通过执行:

sftp -b commands.txt [email protected]$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 [email protected]$host 
rm $temp