Xterm cd 명령이 부팅 옵션에서 작동하지 않습니다

Xterm cd 명령이 부팅 옵션에서 작동하지 않습니다

다음과 같이 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-ccd ~; bashxterm -hold -e sh -c 'cd && exec bash'xterm -hold -e env -C ~ bashenv

따라서 다음을 사용하는 것이 더 좋습니다.

xterm -hold -e sh -c 'cd && exec bash'

관련 정보