![](/img/trans.png)
[英]Exit code of previous command execution is always 0 — In Remote Shell Execution $?
[英]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在运行所有命令后自动退出,因此不需要exit
或bye
。 使用</dev/null
还可以确保即使您确实使用了-e
,尝试从stdin中读取其他命令的操作也会返回EOF(因此同样表示退出)。
我还观察到,以某种方式,在执行本地命令后,lftp将运行下一个命令的本地版本,即使未为第二个命令“ local”指定。 通常,这会还原为第三次向远程站点发送命令,但是,有时当我离开终端并返回并稍后发出第三条命令时,新命令和所有后续命令也将应用于本地,例如,如果连接已丢失(或者好像从未存在过),并且在这种情况下,除非我重新连接到该站点,否则根本无法执行“再见”之类的命令。
要解决此问题,我要做的是在连接过程中尽早定义一个书签,以便以后重用并确保在发出“再见”之前已打开书签-如您所说,应关闭连接/过程/应用程序和/或窗口。
因此,最初,发出诸如“书签保存远程”之类的内容。 在离开之前,发出“ open remote”之类的,然后发出“ bye”之类的命令,这应该可以工作。
注意:如果您希望连接到多个服务器并计划进行并发工作,请给书签使用唯一的名称而不是“远程”,因为所有会话很可能会共享同一组lftp书签。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.