2010-02-11 3 views
1

나는 git filter-branch를 사용하는 방법을 알아 내려고하고 있는데, 기본적인 리눅스 스크립팅 명령에 도움이 필요하다.이 복잡한 셸 명령 (|, && 및 sed 포함)은 어떻게 작동합니까?

'git ls-files -s | sed "s-\t-&newsubdir/-" | 
       GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ 
         git update-index --index-info && 
     mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD 

누구든지 나를 부러 뜨릴 수 있고 각 부분을 설명 할 수 있습니까?

나는 '|' 노테이션, & & 표기법 및 sed 명령.

+0

이 경우에는 문제가되지 않지만 일반적으로 리눅스에는 여러 개의 스크립트 언어가 있습니다. 파일의 첫 번째 행은 어떤 정보를 질문에 포함시켜야하는지 알려줍니다. –

+0

@ 존 :이 스 니펫은 아마도 자식 제어 파일에 있습니다. 즉, 특정 쉘이 이미 잘 정의되어 있거나 완전히 알려지지 않았 음을 의미합니다. –

답변

1

| 다음 명령의 stdin에 위의 명령의 stdout을 연결합니다.

&&은 앞의 명령의 리턴 코드가 0 인 경우 (즉, 명령이 성공한 경우) 다음 명령을 실행합니다.

sed의 s 명령은 대체입니다. 첫 번째 인수에 대해 정규 표현식을 검색하고 두 번째 인수로 바꿉니다. 인수 분리 기호는 전통적으로 /이지만이 경우 뒤에 오는 첫 문자 인 -을 사용합니다. 대체물의 &은 전체 경기로 대체됩니다.

+0

감사합니다. 첫 번째 명령은 파일을 나열합니다. sed는 \ t를 "newsubdir"로 바꾸고 sed의 출력을 새로운 $ GIT_INDEX_FILE.new로 설정합니다. – dirtytofu

+1

아닙니다. sed는'\ t'를'\ tnewsubdir'로 대체하고,'git update-index --index-info'로 파이프 할 것이며, 성공하면 파일의 이름을 바꿉니다. 'git update-index '의 프롤로그는 명령 실행을위한 환경 변수를 정의하기 위해 사용됩니다. –

+0

'git update-index --index-info' 전에 먼저'sed'의 결과를'GIT_INDEX_FILE = $ GIT_INDEX_FILE.new'로 파이프하지 않습니까? – dirtytofu

2

"|" unix pipe 명령은 왼쪽면의 명령을 오른쪽면의 명령에 연결하는 명령입니다.

는 "& &는"유닉스 "및"이고 왼쪽의 IT에 대한 명령이 성공적으로 완료 한 경우에만 경우 오른쪽에서 명령을 실행할 명령

"나오지도"유닉스 "스트림 편집기"입니다 구문 분석 및 편집하는 강력한 편집 도구