2011-12-05 43 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作爲輸入用於另一命令