우리는환경(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 도구 세트는 수년 동안 사용되어 왔으며 널리 사용됩니다.
- 웨인 마샬의 수감자들은
runtool
:runtool -c /new/cwd myProgram
- 로랑 베르코 이그제큐티브
cd
:cd /new/cwd myProgram
- 나의 간식 도구 세트가지다
chdir
:chdir /new/cwd myProgram
이들 모두는 이러한 유형의 체인과 함께 사용하도록 특별히 설계된 체인 로딩 도구입니다. 이러한 툴킷에는 다른 목적으로 사용할 수 있는 다양한 체인 로딩 도구가 있습니다.
추가 읽기
- https://unix.stackexchange.com/a/353698/5132
- 로랑 벨코트(2018-08-01). "인용하다".구현하다. skarnet.org.
- 로랑 벨코트(2018-11-08). "인용하다".s6. skarnet.org.
- 조나단 데보인 폴라드(2018). "명령 및 도구 목록". 스낵 가이드. 소프트웨어.
답변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
dir
makefile을 읽거나 다른 작업을 수행하기 전에 디렉터리를 변경하십시오.
그리고 타르:
-C
,--directory=DIR
DIR
아무것도 하기 전에 으로 변경하세요. 이 옵션은 순서를 구분합니다. 즉, 모든 후속 옵션에 영향을 미칩니다.