답변:
다음과 같이 프로그램을 호출하십시오.
(cd /c; /a/helloworld)
괄호로 인해 하위 셸이 생성됩니다. 이 하위 쉘은 자사의 작업 디렉토리를 변경 /c
한 후 실행, helloworld
에서 /a
. 프로그램이 종료되면 하위 쉘이 종료되고 시작한 디렉토리의 상위 쉘 프롬프트로 돌아갑니다.
오류 처리가 : 맞춤법이 틀린 한 때 디렉토리를 변경하지 않고 프로그램을 실행 방지하기 위해, 예를 들면 /c
, 실행을helloworld
조건부로 .
(cd /c && /a/helloworld)
메모리 사용량 줄이기 : hello world가 실행되는 동안 서브 쉘 메모리 낭비를 피하려면 helloworld
exec를 통해 호출하십시오 .
(cd /c && exec /a/helloworld)
[ 이 답변을 개선하는 데 도움을 준 Josh와 Juliano 에게 감사합니다 !]
유사 데이비드 슈미트 의 대답 플러스 조쉬의 제안하지만, 실행중인 쉘 프로세스를 떠나지 않습니다
(cd /c && exec /a/helloworld)
이 방법은 일반적으로 쉘에서 명령을 실행하는 방법과 더 유사합니다. 실제 차이점을 보려면 ps ef
각 솔루션마다 다른 쉘에서 실행해야합니다 .
서브 쉘이 필요없고 bash에 내장 된 옵션
(pushd SOME_PATH && run_stuff; popd)
데모:
$ pwd
/home/abhijit
$ pushd /tmp # directory changed
$ pwd
/tmp
$ popd
$ pwd
/home/abhijit
pushd SOME_PATH && run_stuff && popd
run_stuff가 실패하면 popd가 실행되지 않는 것을 고려하십시오 .
set -e
파일에서 사용하지 않도록 설정하면 실패합니다 popd
.
pushd "${SOME_PATH}" && run_stuff; popd
푸시 / 팝 시맨틱은 특정 디렉토리로 이동 한 다음 원래 디렉토리로 돌아 오는 이러한 상황을 위해 특별히 설계되었으므로 여전히 현재 답변보다 낫습니다.
sh -c 'cd /c && ../a/helloworld'
필자는 항상 UNIX 도구를 필터로 작성하고 stdin에서 입력을 읽고 stdout에 출력을 작성해야한다고 생각합니다. 가능하면 텍스트 파일의 내용을 특정 파일이 아닌 stdout에 쓰도록 helloworld 바이너리를 변경할 수 있습니다. 그렇게하면 쉘을 사용하여 파일을 어디에서나 쓸 수 있습니다.
$ cd ~ / b
$ ~ / a / helloworld> ~ / c / helloworld.txt
왜 간단하게 유지하지?
cd SOME_PATH && run_some_command && cd -
마지막 'cd'명령은 마지막 pwd 디렉토리로 돌아갑니다. 이것은 모든 * nix 시스템에서 작동합니다.
run_some_command
실패하면 cd -
실행되지 않습니다.
현재 디렉토리에서 명령을 실행할 스크립트 디렉토리의 전체 경로를 제공하십시오.
/root/server/user/home/bin/script.sh
su
실행하기 전에 작업 디렉토리를 지정한 사용자의 홈 디렉토리로 재설정 하는 어려운 방법을 발견했습니다-c
. 이것은 나에게 매우 도움이되었다.