linux - 执行本地 shell 命令后退出 lftp

标签 linux shell sftp

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

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

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

我试过了

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

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

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

最佳答案

请注意,您尝试的操作不会产生有用的效果 -- local shell 在您运行的地方是本地的 lftp ,所以你正在运行 find与客户端而不是服务器在同一台机器上。 因此没有理由运行 find里面lftp而不是在它之外。

尽管如此,并回答了字面上的问题——您可以将命令分成多行; $'\n'是换行符的文字,或者换行符可以按字面意义添加到单行字符串中。因此:

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

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

关于linux - 执行本地 shell 命令后退出 lftp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33927303/

相关文章:

linux - 将shell脚本转换为tcl脚本

arrays - 如何在 bash shell linux 中交换数组元素?

bash ps1 仅在新终端窗口上执行一次脚本

java - 有没有一种简单的方法来检查 SFTP 服务器是否有变化?

java - JSch ChannelSftp.put 方法 RESUME 模式

asp.net - 在 Linux 机器上安装 Visual Studio

c++ - 如何链接GLX?

c++ - 如何让 Google Test 检测 Linux 上的线程数?

javascript - SpiderMonkey js shell 不会碰撞字节码?

windows - 上传大文件时出现WinSCP错误代码4