2012-05-15 127 views
2

我有兩行代碼cat命令

1)用下面的代碼:

for i in `ls *.properties`; do cat $i; done 

我得到的錯誤:

cat: file_name.properties: No such file or directory. 

2)其他手:

for i in *.properties; do cat $i; done 

工作正常!

我以爲兩者都是一樣的。有人能幫我理解兩者之間的區別嗎?使用bash shell。

+2

貴的文件名包含一個空間? –

+0

不,它不。名稱由下劃線分隔。 –

+0

請顯示* actual *示例。如果你不想分享,它不一定是你真正的文件名,但是能夠證明你看到的問題會有所幫助。 –

回答

6

下列命令打印什麼?

cat -v <<< `ls *.properties` 

我想問題是,那ls是一個奇怪的別名,例如,像

ls='ls --color' 

編輯:我以前見過這個。別名應該是:alias ls='ls --color=auto'

+0

'別名| grep ls' –

+0

謝謝nosid。有一個別名完全如您所述。欣賞它。 –

+0

是的。您的「編輯」編輯答案爲我工作。 –

0

最有可能有一個目錄匹配*.properties。然後ls將輸出這個目錄中沒有目錄名稱的文件。然後cat將找不到給定的文件名。

因此請檢查,file_name.properties是否在實際目錄或某個子目錄中。

編輯

要重現你可以試試這個問題:

# cd /tmp 
# mkdir foo.properties 
# touch foo.properties/file_name.properties 
# for i in `ls *.properties`; do cat $i; done 
cat: file_name.properties: No such file or directory 
+0

不錯的主意,但在這種情況下,他會首先看到'cat:directoryname ::沒有這樣的文件或目錄.'(注意雙冒號) –

+0

@KarolyHorvath你不會,因爲'ls dir'會輸出目錄的_contents_但不是文字'dir'本身。因此'cat'不會看到這個名字,也不能產生你提出的輸出。 –

+0

@卡洛利,整潔,我從來沒有注意到過; 'cat:rc0.d ::沒有這樣的文件或目錄。 :) – sarnold