tmux를 시작하도록 기본 쉘을 설정하는 방법


답변:


46

이것은 작동하는 것 같습니다 ...

https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login

별칭 앞에 .bashrc에 다음 bash 코드 행을 추가하십시오. 다른 쉘의 코드는 매우 유사합니다.

[[ $TERM != "screen" ]] && exec tmux

2
나에게 이것은 또한 [[ $- != *i* ]] && return같은 페이지에서 무한 루프가 아니
Keith Smiley

5
TERM사용자 .tmux.conf파일에 의해 다른 값으로 설정 될 수 있기 때문에 이것은 나쁜 해결책 입니다. TMUX변수 설정 여부를 확인하는 것이 좋습니다.
Kusalananda

104

@StarNamer의 대답은 일반적으로 정확하지만 (1) tmux가 시스템에 존재하고 (2) 대화식 쉘에 있고 (3) tmux가 내부에서 실행되지 않도록하기 위해 일반적으로 다음 테스트를 포함합니다 그 자체:

if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  exec tmux
fi

참고 문헌


1
좋아, 나는 command전에 필요 했지만 그것이 존재한다는 것을 몰랐다.
Freedom_Ben

2
exec문장으로 전체 터미널을 종료하지 않고 tmux를 종료 할 수 없습니다! : |
Louis Maddox

5
@LouisMaddox : exec현재 프로세스를 새로운 프로세스로 바꿉니다.이 경우 bash 로그인 쉘을 tmux로 바꿉니다. 따라서 tmux가 종료되면 다른 터미널이 없습니다 :)
Mark K Cowan

1
@rjt 맞습니다. 이것은 의도적으로 새로운 세션을 시작합니다. 기존 tmux 세션에 연결하려는 경우 선호 exec tmux하는 풍미로 대체 하십시오tmux attach
user7089

2
대신 exec tmux사용 exec tmux new-session -A -s main하여 원격 컴퓨터에 연결할 때마다 새 세션을 생성하는 대신 항상 main이라는 세션을 만들고 연결하지만 사용 tmux attach가능한 세션이없는 경우 사용 하는 것처럼 충돌하지 않습니다 . unix.stackexchange.com/a/176885/256942 )
Verena Haunschmid

16

같은 줄 추가

[ -z "$TMUX"  ] && { tmux attach || exec tmux new-session && exit;}

bashrc 파일에서 아마 일을 할 것입니다. tmux를 분리하거나 종료하면이 행은 ssh를 종료하고 연결을 종료합니다. 키 스트로크를 저장하여 연결을 종료 하므로이 구성이 마음에 듭니다. 그러나 이것이 마음에 들지 않으면 (아마도 가능성이 없다고 생각합니다) 종료 후 로그인 쉘에 남아 있으려면 exit부분을 제거하십시오 .

[ -z "$TMUX"  ] && { tmux attach || exec tmux new-session;}

또한 당신은 포장 안주의 tmux attachexec부착 할 TMUX 세션이없는 경우이 연결이 종료되는 원인 것처럼.


이 줄을 내 .bashrc에 추가했지만 이제 터미널을 시작할 때 몇 가지 메시지가 나타납니다. 15). "set default-command"exec bash ""및 "set-terminal-terminal"screen-256color "와 같은 줄입니다.
Matt G

@MattG tmux 구성 파일에 문제가있는 것 같습니다.
huangzonghao

5

chsh로그인 쉘을 변경하는 명령이 있습니다 . 문의하십시오 man chsh.


6
tmux쉘이 아니며 GNU 화면과 같은 터미널 멀티플렉서 입니다. 흥미롭게도, 그것은 man page-c 에 따라 옵션을 지원 하므로 로그인 쉘로 사용하기에 충분할 정도로 쉘처럼 작동 할 수 있지만 gdm / kdm을 통한 그래픽 로그인과 같은 모든 상황에서 제대로 작동하지 않을 것으로 생각됩니다 .
Mikel

1
이것은 문서에 의해 합리적이고 뒷받침되지만 SSH를 통한 직접 명령 실행을 중단하는 것처럼 보입니다 ( ssh $some_server echo foo).
n.st

3
Ubuntu에서 1.8 이상으로 tmux는에 추가 /etc/shells되므로 유효한 로그인 쉘입니다.
claytron

2
이를 위해서는 default-shell실제 쉘을 가리 키도록 tmux 구성의 설정 을 구성해야합니다 .
Kusalananda

4

나는 성공적으로 사용하고 있습니다

case $- in *i*)
    [ -z "$TMUX" ] && exec tmux
esac

.zshrc. bash를 사용하는 경우 .bashrc대신 bash를 넣으십시오 .


또한 tmux기본 쉘 ( chsh -s $(which tmux)) 로 설정 을 시도했지만 SSH를 통한 직접 명령 실행을 중단하는 것처럼 보입니다. 예를 들어 ssh $some_server echo foo출력이 생성되지 않습니다.


2

터미널 우선 순위로 이동하십시오. 여기에 이미지 설명을 입력하십시오

그런 다음 "명령"표시 줄을 클릭하십시오. 여기에 이미지 설명을 입력하십시오

"내 판매 대신 사용자 정의 명령 실행"을 확인하고 터미널 시작시 실행할 명령을 작성하십시오.


1

위의 응답 중 어느 것도 나를 위해 일 exec tmux하지 않았습니다 - 쉘을 종료하지 않고 tmux를 닫지 못하게합니다 ( Ctrl+ T또는 응용 프로그램 메뉴에서 열 었는지 여부 ).

Linux Mint를 사용하면 특정 단축키를 명령에 매핑 할 수 있으며 (일부 경우와 같이 코셔 해제 할 수 있습니다.) 명령을 시작하는 bash 쉘이 있습니다. 예를 들어 Win+ Alt+ B는 일종의 복잡한 bash -exec(vim)문장을 수행합니다. 내 .bashrc를 편집하면 일반 쉘처럼 작동합니다.

위의 내용을 my 맨 위에 배치 한 후 해당 상황에서 vim이 아닌 tmux 가로 드되었습니다 .bashrc. tmux 실행 라인을 다른 if 문에 래핑하여 대화 형 모드에서 실행되고 있는지 확인했습니다.

if command -v tmux>/dev/null; then
        if [ ! -z "$PS1" ]; then # unless shell not loaded interactively, run tmux
                [[ ! $TERM =~ screen ]] && [ -z $TMUX ] && tmux
        fi
fi

모든 것을 한 줄로 감쌀 수는 있지만 가독성을 위해 괜찮습니다.


앰퍼샌드를 추가하면 그와 같은 문제가 해결됩니다. [[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux &
Daniel Chateau

1

@Louis Maddox의 답변에 덧붙여서 tmux 부분을 다음과 같이 실행합니다.

(exec tmux attach || exec tmux new-session)

나는 exec sh -c 'tmux a || tmux'tmux가 어떤 이유로 든 시작할 수 없다면 (당신의 대답을 본 후) 아마도 나쁜 일이 일어날 것입니다 ...를 사용합니다. 감사합니다, 지금부터 당신을 사용할 것입니다 :)
Mark K Cowan

1
tmux new -A -s mysession아마 작동합니다.
poolie

1

이것은 내 ~/.profile(내가 사용하고있다 ksh93) :

if [[ -z "$TMUX" ]]; then
    if tmux has-session 2>/dev/null; then
        exec tmux attach
    else
        exec tmux
    fi
fi

경우 TMUX환경 변수가 비어 / 설정 해제, 우리는 그렇게하는 TMUX 세션에없는 것 ...

tmux has-session종료 상태가 0으로 리턴 되면 (true) 연결할 수있는 세션이 있습니다. 그것에 첨부하십시오.

그렇지 않은 경우 새 세션을 작성하십시오.

tmux로그인 쉘로 사용할 수도 있습니다 . 그러나 이렇게하면 파일 default-shell에서 실제 쉘로 설정 해야 ~/.tmux.conf합니다 (자세한 내용은 tmux 매뉴얼을 참조하십시오).


1

chsh명령을 사용 하여 tmux를 기본 쉘로 설정 한 후 다음을 추가 할 수 있습니다 .tmux.conf.

set-option -g default-shell /path/to/your/favourite/shell

줄 끝에서 경로를 수정해야합니다.


1

조건부 세션 검사와 함께 광범위한 검사를 결합하고 자체 스핀을 설정하여 연결되거나 작성된 기본 세션을 만듭니다. 다른 tmux 세션에 속하지 않거나 다른 보호 조건이 충족되지 않는 한.

if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  tmux a -t default || exec tmux new -s default && exit;
fi

이 답변을 바탕으로 :

https://unix.stackexchange.com/a/306165/198110

https://unix.stackexchange.com/a/113768/198110


0

이것을 당신의에 추가하십시오 ~/.tmux.conf

set -g default-command /usr/local/bin/fish

1
나는 당신이 질문 배우자를 오해했다고 생각합니다! ;)
PhilT

-3

Mikel은 이미 자신의 의견에서 tmux가 로그인 쉘로 부작용을 가질 수 있다고 언급했듯이. 그러나 tmux기본 쉘을 그대로 만들 수 있습니다 . 사용자의 기본 쉘은 / etc / passwd에 정의되어 있습니다. 따라서 root가되어 / etc / passwd를 편집 할 수 있습니다. 예를 들어, sudo vi /etc/passwd사용자 이름으로 시작하는 줄을 검색하십시오. 아마로 끝납니다 :/bin/bash. / bin / bash를 / usr / bin / tmux로 변경하면 이제 tmux가 기본 로그인 쉘입니다.

그러나 이것이 문제가되지 않는다는 보장은 없습니다!

더 잘 작동 하는 것은 루트 권한 이 필요한 작업을 수행 하지 않는 것입니다. 나는 .bash_login이라는 이름의 내 홈 디렉토리에 파일을 만들고 그 파일 내에서 tmux를 시작하려고한다 :`echo "tmux"> ~ / .bash_login.

이것은 작동해야하지만, 우리 자신을 찾아야합니다. b / c bash 문서는 파일을 읽고 실행하는 시점에 대해 매우 정확하지 않습니다.


2
첫 번째 단락에서 설명하는 것은 무엇입니까 chsh! 당신의 길은 루트가 필요하고 오류가 발생하기 쉽다는 것을 제외하고. 실행 tmux에서하는 .bash_login것입니다 원격 로그인을 깰 것으로 보인다.
Gilles
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.