답변:
이것은 작동하는 것 같습니다 ...
https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login
별칭 앞에 .bashrc에 다음 bash 코드 행을 추가하십시오. 다른 쉘의 코드는 매우 유사합니다.
[[ $TERM != "screen" ]] && exec tmux
TERM
사용자 .tmux.conf
파일에 의해 다른 값으로 설정 될 수 있기 때문에 이것은 나쁜 해결책 입니다. TMUX
변수 설정 여부를 확인하는 것이 좋습니다.
@StarNamer의 대답은 일반적으로 정확하지만 (1) tmux가 시스템에 존재하고 (2) 대화식 쉘에 있고 (3) tmux가 내부에서 실행되지 않도록하기 위해 일반적으로 다음 테스트를 포함합니다 그 자체:
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
exec tmux
fi
참고 문헌
command
하여 명령이 있는지 확인 -http : //man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommand
대신 사용 하는 이유 which
-https: //unix.stackexchange.com/a/85250$PS1
대화식 쉘 확인에 사용 -https: //www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html$TERM
"TMUX 내에서 실행되는 모든 프로그램에 대한"환경 변수 - http://man7.org/linux/man-pages/man1/tmux.1.html#WINDOWS_AND_PANEScommand
전에 필요 했지만 그것이 존재한다는 것을 몰랐다.
exec
문장으로 전체 터미널을 종료하지 않고 tmux를 종료 할 수 없습니다! : |
exec
현재 프로세스를 새로운 프로세스로 바꿉니다.이 경우 bash 로그인 쉘을 tmux로 바꿉니다. 따라서 tmux가 종료되면 다른 터미널이 없습니다 :)
exec tmux
하는 풍미로 대체 하십시오tmux attach
exec tmux
사용 exec tmux new-session -A -s main
하여 원격 컴퓨터에 연결할 때마다 새 세션을 생성하는 대신 항상 main이라는 세션을 만들고 연결하지만 사용 tmux attach
가능한 세션이없는 경우 사용 하는 것처럼 충돌하지 않습니다 . unix.stackexchange.com/a/176885/256942 )
같은 줄 추가
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session && exit;}
bashrc 파일에서 아마 일을 할 것입니다. tmux를 분리하거나 종료하면이 행은 ssh를 종료하고 연결을 종료합니다. 키 스트로크를 저장하여 연결을 종료 하므로이 구성이 마음에 듭니다. 그러나 이것이 마음에 들지 않으면 (아마도 가능성이 없다고 생각합니다) 종료 후 로그인 쉘에 남아 있으려면 exit
부분을 제거하십시오 .
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session;}
또한 당신은 포장 안주의 tmux attach
에 exec
부착 할 TMUX 세션이없는 경우이 연결이 종료되는 원인 것처럼.
chsh
로그인 쉘을 변경하는 명령이 있습니다 . 문의하십시오 man chsh
.
ssh $some_server echo foo
).
/etc/shells
되므로 유효한 로그인 쉘입니다.
default-shell
실제 쉘을 가리 키도록 tmux 구성의 설정 을 구성해야합니다 .
위의 응답 중 어느 것도 나를 위해 일 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 &
@Louis Maddox의 답변에 덧붙여서 tmux 부분을 다음과 같이 실행합니다.
(exec tmux attach || exec tmux new-session)
exec sh -c 'tmux a || tmux'
tmux가 어떤 이유로 든 시작할 수 없다면 (당신의 대답을 본 후) 아마도 나쁜 일이 일어날 것입니다 ...를 사용합니다. 감사합니다, 지금부터 당신을 사용할 것입니다 :)
tmux new -A -s mysession
아마 작동합니다.
이것은 내 ~/.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 매뉴얼을 참조하십시오).
chsh
명령을 사용 하여 tmux를 기본 쉘로 설정 한 후 다음을 추가 할 수 있습니다 .tmux.conf
.
set-option -g default-shell /path/to/your/favourite/shell
줄 끝에서 경로를 수정해야합니다.
조건부 세션 검사와 함께 광범위한 검사를 결합하고 자체 스핀을 설정하여 연결되거나 작성된 기본 세션을 만듭니다. 다른 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
이 답변을 바탕으로 :
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 문서는 파일을 읽고 실행하는 시점에 대해 매우 정확하지 않습니다.
chsh
! 당신의 길은 루트가 필요하고 오류가 발생하기 쉽다는 것을 제외하고. 실행 tmux
에서하는 .bash_login
것입니다 더 원격 로그인을 깰 것으로 보인다.
[[ $- != *i* ]] && return
같은 페이지에서 무한 루프가 아니