2010-01-25 2 views
15

/home/user/git/app/디렉토리에서 'git tag -l'과 같은 명령을 실행하고 싶습니다. 실제로/집/사용자. 작업 디렉토리를 변경하지 않고 bash에서 어떻게 할 수 있습니까?실제로 디렉토리로 변경하지 않고 특정 디렉토리에서 명령을 실행하는 방법

그래서 NOT :

cd /home/user/git/app && git tag -l 

이 실제로 내 작업 디렉토리를 변경하고 다시 'CD/홈/사용자'를 할 필요가 있기 때문이다.

+0

이 CD입니다 - 다른 건에있다 보면 HTTP-도구 가서 열심히 입력 할 : 디렉토리를 변경 PUSHD를 사용 후 반환 POPD : 여기

[email protected]% pwd /tmp/foo [email protected]% (cd ../bar && pwd && ls -a) /tmp/bar ./ ../ [email protected]% pwd /tmp/foo [email protected]% 

+1

스크립트 안에 있습니다. 게으름과 관련이 없습니다. – primeminister

답변

31

모든 것을 대괄호로 묶으십시오. 그것은 어떤 디렉토리로 가서 당신의 '현재 작업중 인'것에 영향을 미치지 않는 서브 쉘에서 그것을 실행할 것입니다. 여기에 예제가 있습니다.

pushd /home/user/git/app && git tag -l; popd 
0

모든 것이 완료 후

cd - 

를 사용하려고합니다. 이 명령은 마지막 작업 디렉토리로 돌아가는 데 사용됩니다.

4

문제의 명령이 항상 git 명령 일 경우, --git-dir--work-tree 옵션을 사용하여 git에게 수행 할 작업을 지시해야합니다. (또는 스크립트 과정에서이 작업을 많이하는 경우 GIT_DIR 및 GIT_WORK_TREE 변수를 적절한 경로로 설정하십시오.)

이것이 일반적인 질문 인 경우, 저는 Andrzej가 최선의 제안을 시작했다고 생각합니다. 서브 쉘을 사용하십시오. 것,

(cd $dir && run_command) 

다른 솔루션을 펠릭스와 ibread에 의해 제안 : 서브 쉘을 시작하는 적절한 방법은,하지만 (실제로 출력을 캡처하려는 경우가 아니면) 명령 대체를 사용하지 괄호를 사용하는 것입니다 물론 작동하지만 조심해야합니다. 실행중인 명령이 아마도 쉘 기능 일 경우 cd로 끝나고 cd -의 효과를 변경할 수 있습니다. 일반적인 경우의 가장 안전한 방법은 먼저 현재 디렉토리를 변수에 저장하는 것입니다.

+0

대부분 git 명령이므로 두 명령 모두입니다. GIT_DIR에 대한 힌트를 주셔서 감사합니다! – primeminister

+0

이것은 스크립트로 작성된 git 명령이 내부적으로 (적어도 현재 git에서는) 작동하는 방식입니다. 호출하는 git 명령에서 GIT_DIR 및 GIT_WORK_TREE에 대한 설정을 상속 한 다음 이후에 git 명령을 호출하여 git 명령을 상속합니다. – Cascabel

1

(cd /home/user/git/app && git tag -l)과 같은 작업을 할 수 있습니다. 이것은 새로운 쉘을 생성하고 쉘을 변경하지 않고 쉘에서 명령을 실행합니다. 다음을 실행하여이를 확인할 수 있습니다.

$ echo $OLDPWD 
/Users/daveshawley 
$ (cd/&& ls) 
... 
$ echo $OLDPWD 
/Users/daveshawley 
+2

디렉토리에 변수를 사용하고 있기 때문에';'대신'&& '를 사용하는 것이 좋습니다. 명령이 존재하지 않을 수 있으며 명령이 중단되거나 더 나 빠지게됩니다. – Cascabel

5

다른 솔루션입니다 // code.google.com/p/go-tool/
+0

작업 디렉토리를 변경하지 않고 다른 곳에서 명령을 실행하려면'pushd' /'popd'가 반드시 있어야합니다. – bta

+0

'popd' 앞에 세미콜론 대신'&&'를 쓰길 원하지 않습니까? 그렇지 않으면 세 번째 디렉토리에서 종료 될 수 있습니다. –

+0

'pushd' /'popd' 접근법의 한가지 문제점은'OLDPWD' 환경 변수와 같은 정보를 잃을 수 있다는 것입니다.사용자 환경을 쿵쿵 밟지 않고 서브 쉘에서 실행하는 것이 좋습니다. –

관련 문제