Bash:ls说找不到文件

时间:2011-12-05 10:24:31

标签: bash

我尝试了以下命令

for i in `ls`; do ls $i; done

并获得以下输出:

ls: a.out: No such file or directory
ls: c: No such file or directory
ls: contest: No such file or directory
ls: cpp: No such file or directory
ls: java: No such file or directory
ls: : No such file or directory

由于文件列表也是使用ls获得的,因此令人困惑。当我尝试在odecho时,我看到以下内容:

0000000 033 133 060 155 033 133 060 061 073 063 062 155 141 056 157 165 
        033   [   0   m 033   [   0   1   ;   3   2   m   a   .   o   u   
0000020 164 033 133 060 155 012 
          t 033   [   0   m  \n  
0000026
0000000 033 133 060 061 073 063 064 155 143 033 133 060 155 012 
        033   [   0   1   ;   3   4   m   c 033   [   0   m  \n  
0000016
0000000 033 133 060 061 073 063 064 155 143 157 156 164 145 163 164 033 
        033   [   0   1   ;   3   4   m   c   o   n   t   e   s   t 033 
0000020 133 060 155 012 
          [   0   m  \n  
0000024
0000000 033 133 060 061 073 063 064 155 143 160 160 033 133 060 155 012 
        033   [   0   1   ;   3   4   m   c   p   p 033   [   0   m  \n  
0000020
0000000 033 133 060 155 146 151 154 145 056 164 170 164 033 133 060 155 
        033   [   0   m   f   i   l   e   .   t   x   t 033   [   0   m   
0000020 012 
         \n  
0000021
0000000 033 133 060 061 073 063 064 155 152 141 166 141 033 133 060 155 
        033   [   0   1   ;   3   4   m   j   a   v   a 033   [   0   m   
0000020 012 
         \n  
0000021
0000000 033 133 155 012 
        033   [   m  \n  
0000004

这些“033 [0 m”字符代表什么?我该如何避免它们?它们是导致这个问题的原因吗?

请帮忙。

谢谢, Karthick S。

4 个答案:

答案 0 :(得分:4)

您不需要`ls`$(ls)。您可以改用*。通过这种方式,您可以避免花哨的彩色输出,同时保持代码的便携性,可读性和紧凑性。

答案 1 :(得分:3)

这是Bash Pitfalls中的第一名 切勿使用ls作为另一个命令的输入......

答案 2 :(得分:2)

“033 [0 m”字符是用于着色终端输出的转义码。请尝试使用此代码:

for file in $(unset LS_COLORS \ls);
do
     ls "$file";
done

答案 3 :(得分:0)

或者

for file in $(ls -1 -Q --quoting-style=shell --color=never);
do
    ls "$file";
done