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가 실행되는 동안 서브 쉘 메모리 낭비를 피하려면 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
답변
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