2012-09-14 2 views

답변

13

. file을 실행하면 . 내장 쉘을 호출합니다. xargs 변형이 현재 디렉토리를 실행하려고합니다.
내장 명령을 호출하더라도 명령은 하위 쉘에서 실행되므로 모든 "소싱"은 쓸모가 없습니다.

사용 쉘 대체 (globbing)과 그것을위한 루프 : 경우에

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

깨끗한 용액; 'xargs' (그리고'find'' -exec' primary)와 함께 내장 함수를 사용할 수 없다는 것을 알기 쉽습니다. 다음은 동등한 한줄짜리 모음입니다. do [[-f "$ f"]] &&. "$ f"; done' – mklement0

1
매트의 솔루션은 깨끗한입니다 @

하지만 당신이 그것의 재미 다음과 같은 솔루션에 대한 몇 가지 bash는-FU에 관심 원래 find 명령에 따라,도 작동합니다

eval $(find . -maxdepth 1 -type f -exec echo . \'{}\'';' \;) 
  • find는 우를 구성하는 -exec와 함께 사용 발견 된 각 파일에 대한 rcing 명령. . './foo';. 특수 문자가있는 파일 이름을 확인하려면 이스케이프 처리 된 작은 따옴표를주의하십시오. 제대로 처리됩니다.
  • find은 새 라인으로 구분 된 소싱 명령 목록을 반환합니다. 명령 대체 ($()) 을 사용하여 큰 따옴표없이 큰 따옴표를 붙이면 셸은 각 줄을 구분 기호로 사용하여이 줄을 한 줄로 접습니다.
  • 마지막으로 eval은 현재 쉘 (OS X 10.8.1에서 확인)의 컨텍스트에서 소싱 명령의 전체 목록을 실행합니다.

참고 :이 해결 방법의 잠재적 인 문제는 명령 문자열이 많은 파일 및/또는 긴 파일 이름이있는 커다란 크기로 나타날 수 있다는 것입니다.

+0

설명 주셔서 감사합니다! –

관련 문제