xinitrc의 미스터리 - 존재할 수 있는 것과 존재할 수 없는 것

xinitrc의 미스터리 - 존재할 수 있는 것과 존재할 수 없는 것


누군가 내 프로필에 대한 단서를 줄 수 있나요 .xinitrc? 몇 가지 실용적인 질문에 답하는 좋은 매뉴얼을 찾는 데 어려움을 겪고 있습니다.

  • 이는 범용 Bash 스크립트라고 주장하지만 그렇지 않습니다.
  • 일부 명령은 필요 exec하고 일부는 필요하지 않은 이유는 무엇입니까?
  • 이 명령은 정확히 무엇입니까 exec?
  • 이진 구조 또는 구문 구조에만 해당됩니까 xinitrc?
  • exec로 실행할 수 있는 것과 실행할 수 없는 것은 무엇입니까?
  • 환경 변수를 올바르게 설정하는 방법은 무엇입니까?

대부분의 주류 배포판 사용자는 이해할 필요조차 없으며 xinitrcKodi "임시" 셸을 설정해야 할 때까지 초소형 창 관리자 TWM을 사용하고 Kodi를 전체 화면으로 실행해야 했습니다. kodi-standalone껍질은 나에게 적합하지 않기 때문입니다 .

그러나 다시 xinitrc:

실제 사례:

#!/bin/bash
/usr/bin/twm &
sleep 1
exec xterm

twm필요하지 않고 sleep필요합니까? execxterm

작동하지 않는 예:

#!/bin/bash
/usr/bin/twm &
sleep 1
exec WINDOWING=x11 /usr/bin/kodi -geometry +0+0

이것은 exec실행만 WINDOWING=x11되고 나머지 줄은 무시됩니다. 다른 Bash 스크립트 WINDOWING=x11 /usr/bin/kodi -geometry +0+0(이번에는 일반 스크립트) 로 래핑하고 해당 스크립트를 exec; 그런 다음 마침내 작동했습니다.

답변1

exec명령은 현재 쉘 프로세스를 주어진 명령을 실행하여 생성된 프로세스로 대체합니다. 그렇지 않은 경우 exec명령이 종료되면 대기 중인 셸 세션으로 제어가 반환됩니다. 를 사용하면 exec현재 쉘이 대체되므로 해당 시점부터 스크립트는 더 이상 명령을 실행하지 않습니다.

~/.xinitrc파일은 쉘 스크립트입니다. 창 관리자( twm귀하의 경우)뿐만 아니라 먼저 시작하려는 다른 X11 클라이언트(예: xterm다른 터미널 및 xeyes)도 시작됩니다. 이 스크립트에는 유효한 스크립트(셸 스크립트 해석기에 의해 실행되기 때문에)라는 점을 제외하고는 특별한 구문이 없습니다.

첫 번째 예에서는

exec xterm

이는 현재 쉘 프로세스를 다음 xterm으로 대체 exec합니다 .보이는효과가 있지만 .xinitrc스크립트는 종료하기 전에 백그라운드에서 xterm종료를 기다립니다(이것이 파일의 마지막 명령이므로).

이 작업을 완료하면 exec twm셸이 자체적으로 교체됩니다. twm즉, 스크립트에서 다른 명령을 실행할 수 없게 됩니다. 그렇기 때문에 대신 ( 끝에) twm백그라운드 프로세스로 시작한 것입니다 . &sleep은 twm터미널을 시작하기 전에 제대로 시작하는 것입니다. 나는 이것이 반드시 필요하다고 생각하지 않습니다. 실제로 창 장식이나 창 이동 또는 크기 조정 기능이 필요하지 않은 경우 twm다른 창 관리자를 실행할 필요도 없습니다(적어도 전체 화면을 실행하지 않는 경우 xterm).

두 번째 예에서는

exec WINDOWING=x11 /usr/bin/kodi -geometry +0+0

이제 이 exec명령을 사용하여 이러한 환경 변수를 설정할 수 없습니다. 대신 WINDOWING변수를 설정하고 내보낼 수 있습니다.앞으로옮기다 kodi:

export WINDOWING=x11
exec /usr/bin/kodi -geometry +0+0

관련 정보