在我的脚本中,我创建了一个SFTP连接。
之前我从用户那里读取了一些目录值,一旦建立了SFTP连接,我尝试cd到用户给出的那个目录。
但是它不起作用,可能是因为提示符进入了已建立SFTP连接的服务器。
在这种情况下,如何使其工作?
之前我从用户那里读取了一些目录值,一旦建立了SFTP连接,我尝试cd到用户给出的那个目录。
但是它不起作用,可能是因为提示符进入了已建立SFTP连接的服务器。
在这种情况下,如何使其工作?
我也遇到了这个问题,并找到了解决方案。解决方案就在sftp的man页面中。在man页面中,你会发现使用sftp的格式如下:
sftp [options] [user@]host[:dir[/]]
实际上,这里提供了两种格式,但我想使用的是这一种,并且它起作用了。
那么,你需要做什么呢?你只需按照所见的方式提供username@host
,然后在脚本中不加任何空格就跟着:
和你想要更改到的客户端/远程服务器中的路径,就可以了。以下是一个实际示例:
sftp user@host:/path/
sftp $user@$host cd $directory
然后尝试做其他事情,比如:
sftp $user@$host FOO
由于您执行了新命令,将创建到SFTP服务器的新连接,因此该命令FOO
不会在相同的$directory
目录中执行。
您可以使用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 命令