繁体   English   中英

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

[英]Exit from lftp after local shell command execution

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

lftp -e "!find . -maxdepth 3 -name \"index.*\" -type f;exit" sftp://user:pass@mysite.com:22

当执行此命令时,它将使我进入lftp环境,因此我需要发送额外的“ bye”命令以离开该应用程序。 但是我需要在执行Shell命令时自动执行它。

我试过了

lftp -e "!find . -maxdepth 3 -name \"index.*\" -type f;exit;bye" sftp://user:pass@mysite.com:22

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

是否有机会从本地Shell模式退出回到lftp命令模式,然后在同一会话中执行“再见”?

请注意,您尝试执行的操作不会产生有用的效果- 本地 shell对于运行lftp位置而言是本地的,因此您正在与客户端(而不是服务器)在同一台计算机上运行find 因此,没有理由在lftp内部而不是外部运行find

不过,要克服这个问题并回答字面问题-您可以将命令分成多行; $'\\n'是换行符的文字,也可以将换行符直接添加到单行字符串中。 从而:

lftp -c '
open sftp://user:pass@mysite.com:22
!find . -maxdepth 3 -name "index.*" -type f
' </dev/null

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

我还观察到,以某种方式,在执行本地命令后,lftp将运行下一个命令的本地版本,即使未为第二个命令“ local”指定。 通常,这会还原为第三次向远程站点发送命令,但是,有时当我离开终端并返回并稍后发出第三条命令时,新命令和所有后续命令也将应用于本地,例如,如果连接已丢失(或者好像从未存在过),并且在这种情况下,除非我重新连接到该站点,否则根本无法执行“再见”之类的命令。

要解决此问题,我要做的是在连接过程中尽早定义一个书签,以便以后重用并确保在发出“再见”之前已打开书签-如您所说,应关闭连接/过程/应用程序和/或窗口。

因此,最初,发出诸如“书签保存远程”之类的内容。 在离开之前,发出“ open remote”之类的,然后发出“ bye”之类的命令,这应该可以工作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM