执行本地shell命令后从lftp退出

问题描述 投票:0回答:2

我需要在执行一些本地shell命令后自动退出lftp。例如。我需要找到一些文件并退出。

lftp -e "!find . -maxdepth 3 -name \"index.*\" -type f;exit" sftp://user:[email protected]:22

执行此命令时,它会让我进入lftp环境,因此我需要发送额外的“再见”命令才能离开应用程序。但我需要在shell命令执行时自动执行它。

我试过了

lftp -e "!find . -maxdepth 3 -name \"index.*\" -type f;exit;bye" sftp://user:[email protected]:22

但它不起作用(似乎“再见”在本地shell上下文而不是lftp shell中执行)。

有没有机会从本地shell模式退回到lftp命令模式,然后在同一个会话中执行“bye”?

linux shell sftp
2个回答
1
投票

请注意,您正在尝试的内容不会产生有用的效果 - 本地shell是您运行lftp的本地shell,因此您在与客户端相同的计算机上运行find,而不是服务器。因此没有理由在find内部运行lftp而不是在其外部。

但是,通过这个问题并回答文字问题 - 你可以将命令分成多行; $'\n'是换行符的文字,或者换行符可以逐字添加到单行字符串中。从而:

lftp -c '
open sftp://user:[email protected]:22
!find . -maxdepth 3 -name "index.*" -type f
' </dev/null

exitbye不需要使用-c而不是-e导致连接关闭,lftp在所有命令运行后自动退出。使用</dev/null还可以确保即使您确实使用了-e,尝试从stdin读取更多命令也会返回EOF(因此同样表示退出)。


0
投票

我还观察到,不知何故,在执行本地命令后,lftp将运行下一个命令的本地版本,即使没有指定第二个命令“local”。通常这会回复到第三次向远程站点发送命令,然而,当我离开终端并且稍后返回并发出第三个命令时,新命令和所有后续命令也将适用于本地就好像连接已经丢失 - 或者它从未存在过 - 并且在这种情况下,除非我重新连接到网站,否则“再见”之类的命令是不可能的。

我要解决的问题是在连接过程的早期定义一个书签,我可以在以后重复使用,并确保在发出'bye'之前打开 - 正如你所说,应该关闭连接/进程/应用程序和/或窗口。

所以最初,发出类似'书签保存远程'的东西。就在离开之前,发出类似'open remote'然后'bye'的东西,这应该有用。

注意:如果您希望连接到多个服务器并计划进行并发工作,请为您的书签指定唯一名称而不是“远程”,因为所有会话很可能共享同一组lftp书签。

© www.soinside.com 2019 - 2024. All rights reserved.