추가 읽기

추가 읽기

udiskie 자동 마운트 스크립트를 사용하고 있습니다. 내가 원하는 것은 외장 드라이브를 연결하면 설치 폴더 위치에 새 rxvt 터미널이 열리는 것입니다.

모든 것이 잘 작동하지만 유일한 문제는 rxvt-terminal을 시작하고 -cd디렉토리로 변경하도록 선택하면 다른 디렉토리로 CD를 이동한 후에도 드라이브를 마운트 해제할 수 없다는 것입니다. 마운트 디렉토리에 CD를 넣지 않고 수동으로 터미널을 시작하면 -cd원하는 다른 디렉토리로 변경한 후 마운트를 해제할 수 있습니다. 그래서 내 생각은 launch rxvt를 사용 -hold하고 -e해당 옵션을 통해 명령을 실행하도록 선택하는 것입니다 cd.

그러나 작동할 수 없습니다. rxvt가 계속해서 "자식 프로세스를 실행할 수 없습니다"라는 메시지를 표시합니다. 내 스크립트에서 나는 비슷한 모든 것을 시도했고 rxvt-unicode -hold -e "/bin/bash -c cd $@"(스크립트는 작동하는 인수로 udiskie에서 설치 경로를 가져옴) 내가 생각할 수 있는 모든 조합에 따옴표를 사용했습니다. 그래도 rxvt-unicode -hold -e "/bin/bash -c cd /etc"실패하니까 뭔가 잘못된 것 같아요.

답변1

모든 것이 정상입니다

대신, 귀하의 방법 중 어느 것도 작동하지 않습니다. ☺

-cd하위 프로세스를 포크하기 전에 urxvt의사 터미널 마스터의 터미널 에뮬레이터가 될 상위 프로세스의 디렉터리를 변경할 수 있습니다. 제거 시 문제가 발생하는 이유는 터미널 에뮬레이터 프로세스가 이 디렉터리를 작업 디렉터리로 유지하기 때문입니다.

(이는 유니코드 rvxt의 클라이언트-서버 버전에서 나타나는 문제가 아닙니다 urxvtc.)

-c기존 Unix 셸에는 옵션에서 명령을 실행 한 다음 표준 입력에서 읽는 대화형 모드로 들어가는 모드가 없습니다 . 이는 Microsoft/IBM의 경우에는 cmd옵션이 아닙니다 /k. ☺ 당신은 얻습니다누구나표준 입력에서 실행되며 명령이 필요하지 않습니다.또는명령을 실행하지만 둘 다에서 실행하지는 않습니다.

cd마치 내장된 쉘이 아닌 것처럼 시도하여 실행할 수 있는 메소드에 무의식적으로 접근하고 있는 것입니다 . (하위 프로세스를 실행할 수 없을 때 발생하는 문제는 실행하려는 프로그램의 이름이 단일 문자열이라는 것입니다 /bin/bash -c cd /etc. 이는 시스템에 있는 프로그램의 이미지 파일 이름이 거의 확실하지 않습니다.)

실제로는실제 작업은 작업 디렉터리를 변경한 다음 다른 프로그램(이 경우 대화형 셸)에 로드하기 위해 연결하는 것뿐인 독립 실행형 바이너리입니다. 내 nosh 툴킷과 Laurent Bercot의 execline 툴킷에 있는 도구의 이름은 chdircd. Wayne Marshall의 도구 이름은 runtool.

  • urxvt -e chdir "$@" "$SHELL"
  • urxvt -e cd "$@" "$SHELL"
  • urxvt -e runtool -c "$@" "$SHELL"

ENV요구 사항을 완전히 충족하지 못하는 또 다른 남은 접근 방식은 환경 변수를 사용하는 것입니다 . 안타깝게도 이를 활용하려면 POSIX 호환 모드의 대화형 셸이 필요합니다. 이는 원하는 대화형 셸이 아닐 가능성이 높으며 필요한 모든 생성, 보안 및 정리 팁이 포함된 임시 스크립트 파일입니다.

추가 읽기

관련 정보