问题描述
我正在尝试运行一个 ash 脚本,该脚本不断检查文件中有多少个字符,并在达到至少 170 个字符或已过去 5 秒时执行一些代码。为此,我想调用 wc -c
,但它一直告诉我它有一个未知的操作数。
代码:
#!/bin/ash
while true; do
secs=5
endTime=$(( $(date +%s) + secs ))
while [ /usr/bin/wc -c < "/tmp/regfile_2" -gt 170 ] || [ $(date +%s) -lt $endTime ]; do
#more code
解决方法
您想检查 wc
的输出是否满足特定条件。为此,您需要实际执行 wc
,就像您已经使用 date
检查其输出一样。
while [ $(wc -c < "/tmp/regfile_2") -gt 170 ] ||
[ $(date +%s) -lt $endTime ]; do
# ...stuff
注意 $(command substitution)
命令周围的 wc
。
从对建议重复 Checking the success of a command in a bash `if [ .. ]` statement 的回答中可以看出,您当前的命令基本上检查静态字符串 /usr/bin/wc
是否为非空;此字符串后面的 -c
确实是意外且无效的语法。
(不清楚为什么您将路径硬编码到 wc
;可能只是在运行此脚本之前确保您的 PATH
是正确的。有些情况下您确实想要对路径进行硬编码,但我'我猜这不是其中之一;如果是,您也应该对 date
的路径进行硬编码。)