Fak*_*ame 3 shell watch busybox
好吧,这让我有点发疯。
我正在尝试查看一组子目录中的文件数。
find . | wc -l
正确返回子文件夹和文件的数量。
但是,在手表屏幕中watch 'find . | wc -l'
返回
watch: find . | wc -l: No such file or directory
。
它返回与双引号或反引号 (`) 相同的内容。
这是在bash的古老版本上:
GNU bash, version 3.00.16(2)-release (i486-slackware-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.
这也是一个嵌入式设备,因此它运行的是 busybox ( BusyBox v1.1.0 (2010.06.14-02:47+0000) multi-call binary
) 而不是普通的 gnu 实用程序,因此大多数常用工具的大多数开关和功能也不存在。
所以必须考虑到这一点。然而,linux 安装被烘焙到一个磁盘模块上,所以没有简单的方法来更新它。
相同的命令 ( watch 'find . | wc -l'
) 在更新的 linux 安装上正常工作,所以这个问题更多地是关于处理过时的 bash 那么这个确切的片段有什么问题(因为它在其他地方似乎是正确的!)。
Sté*_*las 10
根据您的实现/版本watch
,它可能不会启动 shell 来解释命令行,而是运行一个命令,该命令将它自己收到的参数作为参数。因此,在这种情况下,如果您需要它来运行 shell 命令行,则需要显式启动 shell,如下所示:
watch sh -c 'find . | wc -l'
Run Code Online (Sandbox Code Playgroud)
另请参阅inotifywait -rm .
命令(如果在 Linux 上)以监视目录中的活动。
另请注意,如果文件名不包含换行符,则find . | wc -l
仅返回文件数(不包括..
条目)。如果这可能是一个问题,你可以这样做:
find .//. | grep -c //
Run Code Online (Sandbox Code Playgroud)
另请注意,名称中没有 GNU 或 Unix 实用程序watch
。Linux 工具套件中有一个watch
命令,busybox 中procps
有一个watch
实现。在 BSD 上,watch
做一些完全不同的事情。watch
不是标准命令(在 POSIX、Unix 或 LSB 规范中都没有)。
归档时间: |
|
查看次数: |
6033 次 |
最近记录: |