我需要在执行一些本地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命令模式,然后在同一个会话中执行“bye”?
答案 0 :(得分:1)
请注意,您尝试的内容不会产生有用的效果 - 本地 shell位于您正在运行的地方{{1} },所以你在与客户端相同的机器上运行lftp
,而不是服务器。因此没有理由在find
内运行find
而不是在它之外。
尽管如此,回答这个问题并回答文字问题 - 你可以将命令分成多行; lftp
是换行符的文字,或者换行符可以逐字添加到单行字符串中。因此:
$'\n'
lftp -c '
open sftp://user:pass@mysite.com:22
!find . -maxdepth 3 -name "index.*" -type f
' </dev/null
或exit
不需要使用bye
而非-c
导致连接关闭,lftp自动退出命令运行。使用-e
还可以确保即使您 使用</dev/null
,尝试从stdin读取更多命令也会返回EOF(因此同样表示退出)。
答案 1 :(得分:0)
我还观察到,不知何故,在执行本地命令后,lftp将运行下一个命令的本地版本,即使是第二个命令“本地”命令也是如此。未指定。通常这会回复到第三次向远程站点发送命令,然而,当我离开终端并且稍后返回并发出第三个命令时,新命令和所有后续命令也将适用于本地,就好像连接已经丢失 - 或者它从未存在过 - 并且在这种情况下,除非我重新连接到网站,如“&#39; bye&#39;是不可能的。
我要解决的问题是在连接过程的早期定义一个我可以在以后重复使用的书签,并确保在发布之前打开“#e; bye&#39; - 如你所说,应该关闭连接/进程/应用程序和/或窗口。
所以最初,发出类似&#39;书签保存远程&#39;的内容。就在离开之前,发出类似“打开遥控器”的内容。然后是“再见”,这应该有效。
注意:为您的书签添加唯一的名称,而不是“远程”&#39;如果您希望连接到多个服务器并计划进行并发工作,因为所有会话很可能共享同一组lftp书签。