从/ dev / rfcomm0读取bash not noticing file存在

时间:2018-03-02 05:47:45

标签: bash file sockets bluetooth

我试图查看/ dev / rfcomm0文件是否存在但是通过使用正常的[-f $ file]方式如下所述,我经常得到该文件不存在的消息。但是我可以用cat手动读取文件。 寻找/ etc / hosts只是为了控制我不会疯狂。

file="/dev/rfcomm0"
file2="/etc/hosts"
while :
do
        [ -f $file2 ] && echo "Found host" || echo "Not found host"
        [ -f $file ] && echo "Found rfcomm" || echo "not found rfcomm"

/ dev / rfcomm的手动视图

root@raspberrypi:~# cat /dev/rfcomm0

[NULL, “0,0,0”, “255255255”,5,50, “Nikske”]

可能我错过了一些非常重要的东西,但是在解决方案之后我已经找了很长时间。

1 个答案:

答案 0 :(得分:1)

-f标志明确指出bash文档(我的重点):

  

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

所以我保证你正在查看的文件是一个普通文件,特别是因为它位于/dev目录中所有排序非常规文件往往存在。

一个例子(在我的系统上有一个字符特殊文件):

pax$ ls -al /dev/rfkill 
crw-rw-r--+ 1 root netdev 10, 62 Feb 13 17:49 /dev/rfkill

pax$ [[ -f /dev/rfkill ]] && echo regular || echo not regular
not regular

pax$ [[ -e /dev/rfkill ]] && echo exists || echo does not exist
exists

pax$ [[ -c /dev/rfkill ]] && echo char special || echo not char special
char special

我建议使用ls -al检查文件的类型,并使用相应的[[标记(例如,参见CONDITIONAL EXPRESSIONS的输出man bash }})。