[linux] Linux 쉘에서 현재와 다른 작업 디렉토리로 프로그램을 어떻게 실행합니까?

Linux 쉘을 사용 하여 현재 작업 디렉토리와 다른 작업 디렉토리로 프로그램을 어떻게 시작합니까?

예를 들어 현재 디렉토리 에 파일 helloworld을 만드는 이진 파일 이 있습니다.

이 파일은 directory 안에 있습니다.hello-world.txt

/a

현재 디렉토리에 /b있습니다. 프로그램 실행을 시작 하고 세 번째 디렉토리 어딘가에 ../a/helloworld가져오고 싶습니다 .hello-world.txt/c



답변

다음과 같이 프로그램을 호출하십시오.

(cd /c; /a/helloworld)

괄호로 인해 하위 셸이 생성됩니다. 이 하위 쉘은 자사의 작업 디렉토리를 변경 /c한 후 실행, helloworld에서 /a. 프로그램이 종료되면 하위 쉘이 종료되고 시작한 디렉토리의 상위 쉘 프롬프트로 돌아갑니다.

오류 처리가 : 맞춤법이 틀린 한 때 디렉토리를 변경하지 않고 프로그램을 실행 방지하기 위해, 예를 들면 /c, 실행을helloworld 조건부로 .

(cd /c && /a/helloworld)

메모리 사용량 줄이기 : hello world가 실행되는 동안 서브 쉘 메모리 낭비를 피하려면 helloworldexec를 통해 호출하십시오 .

(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


답변

sh -c 'cd /c && ../a/helloworld'


답변

필자는 항상 UNIX 도구를 필터로 작성하고 stdin에서 입력을 읽고 stdout에 출력을 작성해야한다고 생각합니다. 가능하면 텍스트 파일의 내용을 특정 파일이 아닌 stdout에 쓰도록 helloworld 바이너리를 변경할 수 있습니다. 그렇게하면 쉘을 사용하여 파일을 어디에서나 쓸 수 있습니다.

$ cd ~ / b

$ ~ / a / helloworld> ~ / c / helloworld.txt


답변

마지막 “&&”를 “;”로 변경하십시오. 명령이 실패하거나 성공하더라도 CD가 다시 돌아옵니다.

cd SOME_PATH && run_some_command ; cd -


답변

이를 수행하는 한 가지 방법은 랩퍼 쉘 스크립트를 작성하는 것입니다.

쉘 스크립트는 현재 디렉토리를 / c로 변경 한 다음 / a / helloworld를 실행합니다. 쉘 스크립트가 종료되면 현재 디렉토리는 / b로 되돌아갑니다.

bash 쉘 스크립트 예제는 다음과 같습니다.

#!/bin/bash
cd /c
/a/helloworld