배경: 저는 Tilix를 기본 터미널 에뮬레이터로 사용합니다. Tilix 환경 설정(스크린샷 첨부)에서 Tilix가 시작될 때 다음 명령을 실행하도록 설정했습니다.
/usr/bin/zsh -c "if [[ $(tmux ls 2>/dev/null | grep -q -E '^main.*attached.*'; echo $?) -ne 0 ]]; then tmux attach -t main || tmux new -s main; else /usr/bin/zsh; fi"
다음 사항을 확인합니다.
- tmux 세션 이름
main
이 다음과 같은 경우- 실패하면 다음과 같은 tmux 세션에 연결을 시도합니다.
main
- 실패하면 이름이 지정된 새 tmux 세션을 생성
main
하고 연결합니다.
- 실패하면 이름이 지정된 새 tmux 세션을 생성
- 그렇지 않으면 (성공한 경우) 일반을 시작하십시오.
zsh
- 실패하면 다음과 같은 tmux 세션에 연결을 시도합니다.
이 모든 복잡성이 발생하는 이유는 처음 tilix를 시작할 때 tmux가 실행되고 연결되어 시작되기 때문입니다. 어느새로운 tilix 세션또는새로운 타일릭스 창lauched는 main이라는 기존 tmux 세션을 생성하거나 연결을 시도하지 않습니다. (Tilix에는 자체 다중 창과 창이 있으므로 tmux 세션과 혼동하지 마십시오)
위 코드 블록을 압축할 수 있는지, 아니면 위 코드 블록의 더 나은 버전을 생각해낼 수 있는지 궁금합니다.
답변1
명령 대체는 약간 지나쳤지만 그 외에는 꽤 괜찮아 보입니다. 종료 코드를 사용하면 됩니다.if
^main.*attached.*
패턴이 발견 되면 해당 패턴 ^main.*attached
도 발견되고, 마찬가지로 긴 패턴이 발견되지 않으면 짧은 패턴도 발견되지 않습니다. 더 짧은 패턴의 일치가 더 빠를 수 있습니다.
/usr/bin/zsh -c "if ! tmux ls 2>/dev/null | grep -q -E '^main.*attached'; then tmux attach -t main || tmux new -s main; else /usr/bin/zsh; fi"
답변2
tmux가 충분히 새로운 경우 다음을 수행할 수 있습니다.
[ "$(tmux display -pt=main: '#{session_attached}' 2>/dev/null)" -gt 0 ] && exec tmux new -Asmain || exec zsh