2012-05-15 34 views
0

我有一個文件包含兩個目錄路徑(將包含更多)。我想閱讀每一行,然後在每行上做ls。很簡單的權利?For循環,需要輸入文件不工作

事情是不工作,我不知道爲什麼。無論我做什麼,最後一行總是很好,ls。之前的行是「不」存在於ls,即使它們存在。

的File.List

/path/to/directory1/ 
/path/to/directory2/ 
/path/to/directory1/ 
/path/to/directory2/ 

當我運行下面的代碼片段

DIRECTORIES="file.list" 
for DIR2 in `cat $DIRECTORIES` 
do 
     echo $DIR2 
     ls $DIR2 
done 

我得到的輸出

/path/to/directory1/ 
does not exist. file /path/to/directory1/ 
/path/to/directory2/ 
does not exist. file /path/to/directory2/ 
/path/to/directory1/ 
does not exist. file /path/to/directory1/ 
/path/to/directory2/ 
Server 

下面有什麼不對呢?其他更好的解決方案?

感謝

編輯:奇怪,我只是試圖在另一個Unix機器和工作得很好

回答

2

可能$ DIR2包含行尾?嘗試刪除它們:

DIR2=`echo $DIR2 | tr -d '\r'` 

我認爲是因爲張貼的日誌對我來說看起來很奇怪。 ls命令的個人電腦上輸出如下:

ls: cannot access /path/to/directory1/: No such file or directory

但是你的:

does not exist. file /path/to/directory1/ 
+0

行確實有在該行的最後一些奇怪的字符並工作。我試着用你的方法去除'$ DIR2 = \'echo $ DIR2 | tr -d'[\ n \ r]'\''但沒有工作 – esausilva

+0

我犯了一個錯字,很抱歉。嘗試使用更新後的代碼行(左側沒有美元符號)。我已經更新了答案。 – alexander

0

JGeZau,

腳本看起來不錯,你檢查,你引用你的路徑在絕對/相對方面是否正確?

我複製你的腳本在bash和我沒有任何問題可言:

test.sh:

#!/bin/bash 
DIRECTORIES="paths" 
for DIR2 in `cat $DIRECTORIES` 
do 
    echo $DIR2 
    ls $DIR2 
done 

路徑:

/var/logs/ 
/var/tmp/ 

輸出:

./test.sh

/var/logs/ 
file1.log file2.log 

/var/tmp/ 
tmp1 tmp2 tmp3 

希望這可能有所幫助。

+0

奇怪,我只是試圖在另一個Unix機器,並通過編輯文件上的純文本編輯器,我能夠刪除然後只是正常 – esausilva

1

cat是一個邪惡的計劃,最好是不要使用它。您必須逐行讀取文件,cat輸出不是行緩衝。

while read path ; do 
    ls $path 
done <file.list 
+1

'貓'不是邪惡的,儘管它(經常)被濫用。 –

+0

好吧,貓多半是沒用的。 –

+0

貓不是無用的,但它通常在不需要時使用。 –