Bash는 다른 디렉토리 컨텍스트에서 어떻게 명령을 실행할 수 있습니까?


94

매우 특정 디렉토리 내에서 호출되는 공통 명령이 있습니다. 이 프로그램의 / bin에는 실행 파일이 하나만 있으며 현재 작업 디렉토리는 올바르게 실행하는 데 매우 중요합니다. 스크립트는 실행되는 디렉토리 내에있는 파일에 영향을줍니다.

이제 한 디렉터리에서 몇 가지 작업을 수행하는 사용자 지정 셸 스크립트도 있지만 위에서 언급 한 명령을 다른 디렉터리에있는 것처럼 호출해야합니다.

쉘 스크립트에서 어떻게 수행합니까?


답변:


39

당신이 사용할 수있는 cd내장이나 pushd하고 popd이 목적을 위해 내장 명령을. 예를 들면 :

# do something with /etc as the working directory
cd /etc
:

# do something with /tmp as the working directory
cd /tmp
:

다른 명령과 마찬가지로 내장 기능을 사용하고 스크립트에서 원하는만큼 디렉토리 컨텍스트를 변경할 수 있습니다.


4
cd -POSIX 셸 에도 이전 디렉토리로 다시 변경됩니다. 즉, 말했다 (A) pushdpopd정말 인터랙티브 사용하기위한 것입니다, 그리고 (b) 당신이 할 수 있다고 가정하는 것이 안전하지 cd당신이 시작하는 경우, 백업 특히 (내부적으로 제한적인 권한을 사용할 수 있습니다 복잡한 서브 시스템에서 볼 stackoverflow.com/questions/을 10555284 /… ).
geekosaur

3
서브 쉘을 사용하면 훨씬 더 나은 솔루션입니다
josh123a123

스크립팅의 경우 서브 쉘이 더 나은 아이디어 일 것입니다.하지만 popd.
connorbode

:여기서 상징이 무엇을 의미 하는지 설명해 주 시겠습니까?
Vadim Kotov

2
@VadimKotov 나는 그것이 사실상 무력이라고 생각합니다. 관련 man bash읽기 섹션 : : [arguments]효과 없음; 이 명령은 인수를 확장하고 지정된 리디렉션을 수행하는 것 외에는 아무것도 수행하지 않습니다. 반환 상태는 0입니다.
boycy

218

cd서브 쉘에서 사용하십시오 . 이런 종류의 서브 쉘을 사용하는 약식은 괄호입니다.

(cd wherever; mycommand ...)

즉, 명령에 필요한 환경이있는 경우 사용하려는 모든 항목에 부담을주지 않고 환경 자체를 실제로 확인해야합니다 (우물 컨텍스트에서 매우 특정한 상황에서 사용되는 내부 명령이 아닌 경우). 모든 호출자가 이미 필요한 환경을 보장해야하는 대형 시스템을 정의했습니다.) 일반적으로 이것은 일종의 쉘 스크립트 래퍼입니다.


동일한 컨텍스트 내에서 여러 줄 명령에 \대해 각각 뒤에를 삽입 할 수도 있습니다 ;.
Chiramisu

36
(cd /path/to/your/special/place;/bin/your-special-command ARGS)

20

현재 작업 디렉토리로 돌아가려면 다음을 수행하십시오.

current_dir=$PWD;cd /path/to/your/command/dir;special command ARGS;cd $current_dir;
  1. 우리는 current_dir귀하의pwd
  2. 그런 cd다음 명령을 실행해야하는 곳으로 이동합니다.
  3. 그런 다음 명령을 실행합니다.
  4. 그런 다음 cd변수 로 돌아가서current_dir

@apieceofbart의 또 다른 솔루션 pushd && YOUR COMMAND && popd


4
또는 당신이 할 수있는pushd && YOUR COMMAND && pulld
apieceofbart

4
@apieceofbart popd대신 pulld.
Konstantin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.