나는PS1
SLVL이 1이 아니면 SLVL이 표시되므로 서브셸에 있는지 빠르게 확인할 수 있습니다. 이는 GNOME을 사용할 때 예상대로 작동하지만 Mod4Awesome WM (+)에서 새 터미널을 생성 하면 Return항상 SHLVL=2
이상으로 시작됩니다. 이게 정상인가요?
Mod4이는 Awesome(++ 또는) 을 다시 시작하는 횟수와 직접적인 관련이 있습니다 . 재부팅 시 새 쉘이 생성되는 것을 방지할 수 있는 방법이 있습니까?Ctrlrpkill -HUP awesome
이것들 제출하다$SHELL -c ...
Awesome이 에서 이와 같은 것을 실행하게 되었기 때문에 관련이 있는 것 같지만 HUP
이를 고칠 수 있을 만큼 C를 알지 못합니다.
내 로그인 쉘은 /bin/sh
입니다 .dash
bash
답변1
이유를 이해한다고 생각하지만 완전한 해결책은 없습니다.
동작은 SHLVL
쉘에 따라 다릅니다. 대시 및 ksh(pdksh 및 ksh93)에서는 대화형 인스턴스만 증가됩니다 SHLVL
. Bash 및 zsh에서는 모든 인스턴스가 incremented SHLVL
, 심지어 incremented 됩니다 bash -c …
.
이후 행동의 변화를 관찰한다면이번 패치/bin/sh
, 귀하의 것은 dash이고 귀하의 $SHELL
것은 bash 일 가능성이 매우 높습니다 . 전에는 awesome이 실행 중이었지만 /bin/sh -c …
아무것도 바뀌지 않았습니다 SHLVL
. 패치 후에는 이제 실행 중입니다 $SHELL -c …
. bash -c …
즉 SHLVL
, .
SHLVL
Awesome의 내부를 변경하면 속임수를 쓸 수 있습니다 . 시작 코드를 후크하여 SHLVL
1씩 줄입니다. Lua 코드는 모르지만 C 코드를 다시 컴파일하지 않고도 이것이 가능하다고 확신합니다.