【问题标题】:Bash -f check /sys/class/<device>/bash -f 检查 /sys/class/<设备>/
【发布时间】:2021-05-10 08:07:21
【问题描述】:

我正在尝试制作监控笔记本电脑 (T480) 电池的脚本。有2个电池,内部和外部。充电时,外部信息似乎消失了capacity

/sys/class/power_supply/BAT0/capacity

问题

我检查了收费,如果文件存在,问题是它通过了-f,缺少capacity,它是ASCII text,所以应该没有问题。

脚本

我也试过-e-d-c,但没有成功。

#!/bin/bash
...

[[ -f /sys/class/power_supply/BAT0/capacity ]] && {
    EXTERNAL="$(cat /sys/class/power_supply/BAT0/capacity)" 
   ...some logic
}
..

【问题讨论】:

  • 也许您可以尝试再次检查文件是否为空,如下所示:[[ $(du your_file | cut -f 1) &gt; 0 ]] 或更容易,使用[[ -s your_file ]]
  • -s check 如果文件存在并且它的大小大于零,如果它是空的也没关系,我的目标是避免在-f check之后对不存在的文件进行逻辑。
  • 这真的很难重现。你确定文件真的消失了吗?确保您没有在脚本中的上一个命令中再次创建文件
  • /sys/class/power_supply/BAT0 是一个系统链接。也许考虑在检查里面的文件之前检查the syslink is there
  • 非常感谢-L检查工作!

标签: linux bash debian


【解决方案1】:

将我的comment 转换为答案


/sys/class/power_supply/BAT0 是一个符号链接,如ls -lta 的输出所示:

root@deb:~# cd /sys/class/power_supply/
root@deb:/sys/class/power_supply# ls -tla
total 0
lrwxrwxrwx  1 root root 0 May 21 14:02 BAT0 -> ../../devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0A:00/power_supply/BAT0
lrwxrwxrwx  1 root root 0 May 21 14:02 ADP0 -> ../../devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP0
drwxr-xr-x 48 root root 0 May 21 14:02 ..
drwxr-xr-x  2 root root 0 May 21 14:02 .
root@deb:/sys/class/power_supply#

Obnoxious screen shot

而不是使用-f 标志:

如果文件存在并且是常规文件,则为真。

由于您正在处理符号链接,我建议您使用 -L 标志

如果文件存在并且是符号链接,则为真。

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多