tmux 세션에 연결하고 명령을 실행합니다.

tmux 세션에 연결하고 명령을 실행합니다.

세션에 연결되어 있을 때 Tmux에서 명령을 어떻게 실행하나요?

즉시 명령을 첨부하여 실행하고 싶습니다.

문서를 읽었지만 키만 전송되는데 이는 내 요구 사항에 맞지 않습니다.

답변1

실행 중인 tmux 세션에 연결하고 특정 명령을 실행하는 새 창을 생성할 수 있습니다.

tmux attach \; new-window vim

이것은 기존 창에서 vim을 생성하지 않는다는 점에 유의하십시오. 이를 수행하는 도구가 없으면 실제로 의미가 없습니다. @Falcon Momot가 지적했듯이 기존 창은 무엇이든 실행할 수 있습니다. 문제가 발생합니다. 메서드 명령은 "Send Key"입니다.

답변2

나는 이 문제에 대한 해결책을 찾고 있습니다. 이는 "set-buffer" 및 "paste-buffer" 명령을 사용하여 수행할 수 있습니다.

tmux att -t <session-name> \; set-buffer "<command>^M" \; paste-buffer

완전한 예는 다음과 같습니다.

# let's start with two sessions running bash
tmux new -s theOtherSession \; detach
tmux new -s astropanic \; rename-window main-window \; detach

# attach to the 'astropanic' session, run a directory listing, output
# current datetime, then detach. Note for carriage return (^M) type ^V^M
tmux att -t astropanic \; find-window main-window \; set-buffer "ls;date^M" \; paste-buffer \; detach

# reconnect to check status
tmux att -t astropanic

답변3

tmux 명령 또는 쉘/OS 명령 중 어떤 명령을 실행하려는지 명확하지 않습니다. 각각의 예는 다음과 같습니다.

#!/bin/bash

cd

# give the session a name; makes it easier to reuse code lines
_SNAME=Generic

# start a whole new tmux session
tmux new-session -s $_SNAME -d -x 140 -y 35

# can set tmux options
tmux set-option -t $_SNAME default-path /opt/foo/build

# create a new window that's just a shell
tmux new-window -t $_SNAME -n build -d

# create a new window that's running a program
tmux new-window -t $_SNAME -n vim -d vim

이렇게 하면 세션이 연결되지 않은 상태로 유지됩니다. 이를 추가하려면 쉘 스크립트 끝에 다음 행을 추가하십시오.

# attach to the new session
tmux attach -t $_SNAME

답변4

이것은 Tmux를 시작하거나 연결하고 그 안에서 명령을 실행하는 작은 스크립트입니다. 명령이 실행되면 Tmux가 종료됩니다.

#!/bin/sh -x
SESSION_NAME=foo

tmux has-session -t $SESSION_NAME 2>/dev/null
if [ $? -ne 0 ]
then
  tmux new-session -d -s $SESSION_NAME "$*"
fi
exec tmux attach -t $SESSION_NAME

사용 예:

$ ./script-above 'echo hello world && sleep 10'

관련 정보