加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash测试产生“echo:command not found”

发布时间:2020-12-15 22:53:11 所属栏目:安全 来源:网络整理
导读:好吧,有趣的事情突然发生了.这个测试 for i in `cat /mnt/usb/liste.txt `; do [ -f /mnt/usb/lsdvd.xml/$i ] ||?echo $i; done 以前工作正常(对于文件中的每个条目,liste.txt尝试查找相应的目录,如果找不到则打印名称)并用于生成缺少的目录名称.现在这个命
好吧,有趣的事情突然发生了.这个测试

for i in `cat /mnt/usb/liste.txt `; do [ -f /mnt/usb/lsdvd.xml/$i ] ||?echo $i; done

以前工作正常(对于文件中的每个条目,liste.txt尝试查找相应的目录,如果找不到则打印名称)并用于生成缺少的目录名称.现在这个命令产生了

?echo: command not found
?echo: command not found
?echo: command not found
(...)

我尝试使用[[…]]和“test”而不是“[..]”,但无济于事.

在我不看的时候,我心爱的bash可能发生了什么想法:)?

谢谢,
?基督教.

编辑(设置-x输出):

(...)
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_GHOST_WRITER.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_IMAGINARIUM_OF_DOCTOR_PARNASSUS.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_INFORMANT.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_INTERNATIONAL.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_MEN_WHO_STARE_AT_GOATS.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_OTHER_MAN.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_QUEEN.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_READER.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_REBOUND.lsdvd.xml ']'
+ $'302240echo' THE_REBOUND
+ '[' -x /usr/lib/command-not-found ']'
+ /usr/bin/python /usr/lib/command-not-found -- $'302240echo'
?echo: command not found
+ return 127
(...)

解决方法

如果你仔细观察,你会看到它正在打印:

echo: command not found

领先的空间,而不是:

echo: command not found

set -x在打印时更加清晰:

$'302240echo' THE_REBOUND

对于non-breaking space,0302 0240是八进制UTF-8.

尝试删除|之间的空格并回显并键入一个正常空间.

有可能,该文件是在Mac上编辑的,如果您在Space的同时按Option,则可能会意外输入不间断的空格.

如果您正在使用Vim,则可以使用listchars option使非破坏空间更明显.例如:

set listchars+=nbsp:% list

有关更多想法,请参阅Making Vim highlight suspicious characters.

在Linux上,不间断的空间要么是Compose Space Space,要么是Ctrl Shift ua0,所以你可能不会意外地输入它.

对于任何感兴趣的人,可以使用UTF-8维基百科文章中的UTF-8 table手动将八进制字节转换为UTF-8.

但到目前为止,我发现最简单的方法是使用Python:

>>> import unicodedata
>>> unicodedata.name('302240'.decode('utf-8'))
'NO-BREAK SPACE'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读