2011-12-05 39 views
3

我尝试下面的命令击:LS说找不到文件

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.

+0

的“033 [0 m”个字符是用于着色终端输出转义码。试着用这个:for $(unset LS_COLORS \ ls);做ls“$ file”;完成 – pgl

+0

非常感谢pgl。你可以让它成为答案,以便我可以接受它吗? –

回答

2

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

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

我不希望ls在写入tty时不使用颜色。 – johannes

+0

@johannes'ls --color = auto'检查这个。默认是'always'(--color无参数),也可以是'never'。 – plundra

+0

在我的系统上'man ls'说:“使用颜色区分文件类型在默认情况下都是禁用的,...” – johannes

0

或者

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

错误...请参阅我的答案。 –

4

你不需要`ls`$(ls)。您可以改用*。这样,您可以避免使用彩色输出,同时保持代码的便携性,可读性和紧凑性。

3

这是Bash Pitfalls #1不要使用ls作为输入用于另一命令