2012-09-14 34 views

回答

13

當您運行. file時,您會調用shell內建的.。您的xargs變體嘗試執行當前目錄。
即使這確實會調用內置命令,該命令也會在子外殼中運行,所以所有的「外包」都是無用的。

使用貝通配,併爲一個循環:

for file in * ; do 
    if [ -f "$file" ] ; then 
    . "$file" 
    fi 
done 
+0

清潔解決方案;很高興知道你不能使用'xargs'構建內建函數(對於這個問題''find'''-exec' primary)。這裏是等價的單行:'f in *;做[[-f「$ f」]] &&。 「$ F」;做完了' – mklement0

1

@墊的解決方案是最乾淨的,但如果你有興趣在一些慶典復爲它的樂趣,下面的解決方案,在原有基礎上find命令,工作,太:

eval $(find . -maxdepth 1 -type f -exec echo . \'{}\'';' \;) 
  • find-exec用於構建一個蘇找到每個文件的rcing命令,例如. './foo';。請注意轉義的單引號以確保具有特殊字符的文件名。處理得當。
  • find將返回一個換行符分隔的採購命令列表;通過使用命令替換($()而不使用雙引號,shell將這些行摺疊爲一行,每行使用一個空格作爲分隔符。
  • 最後,eval在當前shell的上下文中執行完整的源代碼命令列表(在OS X 10.8.1上驗證)。

注意:此解決方案的一個潛在問題是命令字符串可能會變大 - 可能太大 - 存在許多文件和/或長文件名。

+0

感謝您的解釋! –

相關問題