다음과 같이 xterm을 시작할 때 다음과 같이
xterm -e 'cd ~' -hold
말하는 새로운 xterm 창이 나타납니다. xterm: Can't execvp cd ~: No such file or directory
그 후에도 xterm 창은 cd ~
수동으로 실행할 수 있는 현재 디렉토리에 여전히 있으며 예상대로 작동합니다. 이 문제의 원인은 무엇입니까? 아니면 xterm의 시작 디렉토리를 변경하는 다른 방법이 있습니까?
우분투 20.04.4 LTS를 실행 중입니다.
답변1
( cd && xterm )
명령에 대한 올바른 작업 디렉토리를 설정하는 가장 일반적인 방법은 cd
명령을 호출하기 전에 설정하는 것입니다. 서브쉘에서 이 작업을 수행하면 호출 쉘의 작업 디렉토리가 변경되지 않습니다.
이 답변의 맨 위에 있는 명령은 하위 쉘을 시작한 다음 cd
작업 디렉토리를 현재 사용자의 홈 디렉토리로 변경하는 데 사용됩니다. 성공하면 xterm
호출됩니다 . xterm
없이 호출 하면 -e
기본적으로 대화형 셸이 시작됩니다.
xterm
종료 시(실패 시 즉시) 제어권은 호출하는 쉘로 반환됩니다 cd
. xterm
터미널은 실행 중인 명령이 종료될 때마다, 즉 대화형 셸이 완료될 때 종료됩니다. 백그라운드에서 하위 쉘을 시작 &
하려면 끝에 사용하십시오 .xterm
답변2
man xterm
이 옵션이 문서화된 위치를 확인하세요 -e
(강조):
-e 프로그램 [매개변수...]
이 옵션은 xterm 창에서 실행될 프로그램(및 해당 명령줄 인수)을 지정합니다. -T 및 -n이 명령줄에 제공되지 않으면 창 제목과 아이콘 이름도 실행 프로그램의 기본 이름으로 설정됩니다.
참고: 이는 명령줄의 마지막 옵션이어야 합니다.
보시다시피,-e
~ 해야 하다명령줄에 전달된 마지막 옵션입니다. 따라서 작동할 것입니다. 터미널이 실행된 다음 즉시 쉘 세션을 종료하기 xterm -hold -e 'cd ~'
때문에 쓸모가 없습니다 . 이는 명령을 실행하고 종료한다는 의미이기 때문입니다.cd
-e
그래서 둘 다 필요해요cd
그리고새 셸을 시작합니다. 그러니 이것을 시도해 보세요:
xterm -hold -e 'cd ~; bash'
스티븐 차제라스나는 여기에 복사된 의견에서 매우 좋은 지적을 했습니다.
를 사용하면
xterm -hold -e 'cd ~; bash'
xterm은 여전히 이라는 명령을 실행하려고 시도합니다cd ~; bash
. 실패할 수도 있지만 이 경우에는 인수가 하나만 전달되는 모호한 상황에 있기 때문에 인수 로 사용 하고 실행하는 것으로-e
대체됩니다 . 여기서 이러한 모호성을 제거하려면 다음을 수행해야 합니다 . 일부 구현 도 참조하세요 .$SHELL
-c
cd ~; bash
xterm -hold -e sh -c 'cd && exec bash'
xterm -hold -e env -C ~ bash
env
따라서 다음을 사용하는 것이 더 좋습니다.
xterm -hold -e sh -c 'cd && exec bash'