如何将管道与lftp一起使用?

如何将管道与lftp一起使用?

我的桌面电脑终端中有以 apk 结尾的文件:

ls  | grep apk
DroidEdit_v1.23.6.apk

我从台式电脑使用 lftp 连接到我的 Android 手机:

lftp  192.168.31.130:3721
lftp 192.168.31.130:~> lcd Downloads
lcd ok, local cwd=/home/debian/Downloads
lftp 192.168.31.130:~> !ls
DroidEdit_v1.23.6.apk

为什么不能在 lftp 命令中使用管道?

lftp 192.168.31.130:/> !ls | !grep  apk
bash: line 1: !grep: command not found

答案1

管道!在(shell)lftp 命令中使用:

$ lftp localhost
lftp localhost:~> !ls | grep rpm
rpmbuild
lftp localhost:~>

lftp 将您的命令传递给$SHELL, bash 在您的情况下为bash -c 'ls | !grep apk';这意味着 bash 处于非交互模式, 意思就是历史扩展被禁用。结果,bash 试图找到一个按字面命名的命令!grep,但失败了。

由于lftp 会将之后的所有文本传递!到shell,因此您无需!为管道中的每个命令调用lftp 的shell 前缀。只需使用:!ls | grep apk或 as多普·戈蒂评论,将其简化为类似的东西!ls -d -- *apk*

相关内容