Làm cách nào tôi có thể chạy một lệnh trong Tmux khi tôi đính kèm vào một phiên?
Tôi muốn đính kèm và ngay lập tức chạy một lệnh.
Tôi đọc tài liệu, nhưng chỉ thấy gửi chìa khóa, không phù hợp với nhu cầu của tôi.
Làm cách nào tôi có thể chạy một lệnh trong Tmux khi tôi đính kèm vào một phiên?
Tôi muốn đính kèm và ngay lập tức chạy một lệnh.
Tôi đọc tài liệu, nhưng chỉ thấy gửi chìa khóa, không phù hợp với nhu cầu của tôi.
Câu trả lời:
Bạn có thể đính kèm vào một phiên tmux đang chạy và sinh ra một cửa sổ mới chạy một lệnh cụ thể:
tmux attach \; new-window vim
Lưu ý rằng điều này không sinh ra vim trong cửa sổ xuất hiện trước - không có cơ sở để làm điều đó, nó không thực sự có ý nghĩa: như @Falcon Momot chỉ ra, một cửa sổ hiện tại có thể chạy bất cứ thứ gì, cách duy nhất để phát hành lệnh là "gửi phím".
\;
là một dấu chấm phẩy thoát, được sử dụng ở đây để tách hai tmux
lệnh (không thoát khỏi dấu chấm phẩy new-windows
sẽ được coi là một lệnh shell mới).
Hãy thử điều này để chạy mutt, ví dụ
tmux has-session -t mail
if [ $? != 0 ]
then
tmux new-session -s mail -n mel_GMAIL -d "TERM=xterm-256color ; mutt -F $HOME/.mutt/muttrc_perso"
fi
lxterminal --command="tmux attach -t mail"
Nó kiểm tra sự tồn tại của một phiên 'mail' đang chạy, nếu không, nó sẽ tạo một phiên và bắt đầu ứng dụng mutt; cuối cùng nó gắn vào nó
Tôi đã tìm kiếm một giải pháp cho vấn đề chính xác này. Nó có thể được thực hiện bằng cách sử dụng các lệnh 'set-buffer' và 'paste-buffer'
tmux att -t <session-name> \; set-buffer "<command>^M" \; paste-buffer
Dưới đây là một ví dụ hoàn chỉnh:
# 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
carriage return
như bạn nói. Tôi đã phải gửi khóa enter như thế này : tmux attach -t "$1" \; set-buffer "ls;date" \; paste-buffer \; send-keys C-m
.
DISABLE_AUTO_TITLE="true"
vào hồ sơ shell của bạn (điều này rất quan trọng), sau đó chỉ sử dụng cửa sổ này để chạy các lệnh khi kết nối. Tôi sử dụng nó để kết nối với một máy chủ ssh và sau đó nhận được vé kerberos của tôi vào đầu ngày. ssh hostname -t "tmux a -t 0 \; select-window -t cmd \; set-buffer \"kinit -f -l 1d -r 30d^M\" \; paste-buffer \;"
. Để thuận tiện, đặt cho nó một cái tên đẹp và lưu nó dưới dạng một tập lệnh trong đường dẫn của bạn. :) Cũng lưu ý ^ M nên được chèn bằng cách nhấn Cv sau đó Enter trong trình chỉnh sửa của bạn.
Tôi không rõ loại lệnh nào bạn muốn chạy, lệnh tmux hoặc lệnh shell / OS. Đây là một ví dụ về mỗi:
#!/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
Điều này làm cho phiên không bị cản trở. Nếu bạn cũng muốn đính kèm với nó, hãy thêm dòng này vào cuối tập lệnh shell:
# attach to the new session
tmux attach -t $_SNAME
Đây là một đoạn script nhỏ bắt đầu hoặc đính kèm vào Tmux và chạy một lệnh trong đó. Khi lệnh đã được thực thi, nó sẽ thoát 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
Ví dụ sử dụng:
$ ./script-above 'echo hello world && sleep 10'
Tôi thích làm điều này:
#!/bin/bash
function tmuxed {
/usr/local/bin/tmux new-session -d -s bkp 2&>/dev/null
/usr/local/bin/tmux send-keys "/Users/xxx/bin/thisscript backup" C-m
}
function backup {
echo 'bla bla doing stuff'
}
$1
Và chạy /Users/xxx/bin/thisscript tmuxed
vi
.