추가 읽기

추가 읽기

우리는환경(1)실행하려는 명령의 환경을 수정합니다(예 env MANPAGER=more man dtrace: ). 비슷한 것이 있지만 명령이 실행될 디렉터리를 수정하는 것이 있습니까?

이상적으로는 다음과 같이 보이고 싶습니다.

theMagicCommand /new/cwd myProgram

이런 식으로 다른 env(1)와 유사한 명령과 "연결"될 수 있습니다.

daemon -p /tmp/pid env VAR=value theMagicCommand /new/cwd myProgram

지금까지 다음과 같은 해결책을 생각해 볼 수 있지만 불행히도 그에 상응하는 해결책은 없습니다.상호 작용환경 (1):

cd /new/cwd && myProgram

또는 다음과 같은 간단한 셸 스크립트를 만들 수 있습니다.

#! /bin/sh -
cd "${1:?Missing the new working directory}" || exit 1
shift
exec "${@:?Missing the command to run}"

하지만 나는 (적어도 macOS와 FreeBSD에는) 이미 존재하는 것을 찾고 있습니다.

myProgram꼭 데스크톱 애플리케이션일 필요는 없습니다(이 경우에는 다음을 사용할 수 있습니다)..desktop 파일을 입력하세요.).

답변1

AFAIK, POSIX 도구 상자에는 이러한 전용 유틸리티가 없습니다. 그러나 명령을 실행하기 전에 일반적 sh으로 스크립트에서와 마찬가지로 환경(cwd, 제한, stdout/in/err, umask...)을 설정하기 위해 호출됩니다 sh.

하지만 해당 스크립트를 파일에 작성할 필요는 없으며 그냥 인라인으로 작성하면 됩니다.

sh -c 'CDPATH= cd -P -- "$1" && shift && exec "$@"' sh /some/dir cmd args

(디렉토리가 아니라고 가정 -). CDPATH=(환경에 있는 경우) 추가 하고 -P보다 직선처럼 작동하도록 만듭니다 chdir().

perl또는 기본적으로 누가 해당 작업을 수행하는지 사용할 수도 있습니다 .chdir()chdir()

perl -e 'chdir(shift@ARGV) or die "chdir: $!"; exec @ARGV or die "exec: $!"
         ' /some/dir cmd args

답변2

전 세계 및 다른 곳에서 사용되는 daemontools 도구 세트는 수년 동안 사용되어 왔으며 널리 사용됩니다.

이들 모두는 이러한 유형의 체인과 함께 사용하도록 특별히 설계된 체인 로딩 도구입니다. 이러한 툴킷에는 다른 목적으로 사용할 수 있는 다양한 체인 로딩 도구가 있습니다.

추가 읽기

답변3

이런 인기 프로그램이 있어요. 그것은…의자를 잡아…드럼롤 env…이라고 불립니다. 버전 8.28부터 GNU 버전(POSIX 제외)에는 -C필요에 따라 디렉터리를 설정할 수 있는 옵션이 있습니다.

    이름
           env - 수정된 환경에서 프로그램 실행

    요약
           env [옵션]...[-][이름=값]...[명령[매개변수]...]

    설명하다
           환경의 모든 NAME을 VALUE로 설정하고 COMMAND를 실행합니다.

           장기 옵션의 필수 매개변수는 단기 옵션에도 필수입니다.

           -나,--환경을 무시하라
                  빈 환경에서 시작

           -0,- 유효하지 않은
                  각 출력 줄은 개행 문자가 아닌 NUL로 끝납니다.

           -유,--설정 취소=이름
                  환경에서 변수 제거

           -씨,--chdir=디렉토리
                  작업 디렉토리를 DIR로 변경

           - 돕다이 도움말을 표시하고 종료하세요.

           - 버전
                  버전 정보 출력 및 종료

           그냥 - 뜻-나. COMMAND가 없으면 결과 환경이 인쇄됩니다.

답변4

일부 프로그램에는 Git과 같은 옵션이 있습니다.

-C <path>

현재 작업 디렉토리 대신 에서 git시작된 것처럼 실행됩니다.<path>

그리고 다음을 수행하십시오:

-C dir,--directory=dir

dirmakefile을 읽거나 다른 작업을 수행하기 전에 디렉터리를 변경하십시오.

그리고 타르:

-C,--directory=DIR

DIR아무것도 하기 전에 으로 변경하세요. 이 옵션은 순서를 구분합니다. 즉, 모든 후속 옵션에 영향을 미칩니다.

관련 정보