我的桌面电脑终端中有以 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*
。