如何在建立连接的SFTP连接中使用CD - Shell脚本
在我的脚本中 - 我创建了一个sftp连接。如何在建立连接的SFTP连接中使用CD - Shell脚本
我之前从用户那里读取了一些目录值,并且一旦建立了sftp连接,我尝试cd到我从用户那里获得的目录。
但它不工作,可能是因为提示符进入SFTP连接建立的服务器。
在这种情况下如何使它工作?
它以什么方式不起作用?要更改远程服务器上的目录,请使用“cd”命令。要更改本地服务器上的目录,请使用“lcd”命令。阅读“man sftp”。
如果这是我的脚本的一部分sftp $ uid @ $ ip cd $ path - 一旦执行了sftp命令,提示会转到执行sftp命令的服务器。所以它不会在脚本的下一行中执行cd/lcd命令 – vvshack 2012-07-05 14:56:44
如果你正在试图改变机器的目录,尝试LCD
如果这是我的脚本的一部分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
SFTP协议没有“当前目录”的概念,因此你不能在任何地方“cd”。控制台SFTP客户端在内部模拟类似于chdir的命令。 – 2012-07-05 15:39:35