如何判斷是否正在tty下使用screen/tmux - Linux

By Sarah
at 2011-09-21T17:41
at 2011-09-21T17:41
Table of Contents
※ 引述《Holocaust123 (一步一腳印)》之銘言:
: 我通常是用"tty"這個指令判斷是否正在tty下
: 例如
: 1. 在tty(1~6)時(假設在tty1)
: user@local_host:~$ tty
: /dev/tty/1 => tty
: 2. 在x11中使用gnome-termial時
: user@local_host:~$ tty
: /dev/pts/7 => pts
: 3. 用putty遠端到遠端Linux伺服器時
: user@remote_host:~$ tty
: /dev/pts/10 => pts
: 4. 在gnome-terminal中使用screen/tmux時
: user@local_host:~$ tty
: /dev/pts/8 => pts
: 不過
: 5. 在tty(1~6)中使用screen/tmux時
: user@local_host:~$ tty
: /dev/pts/8 => 恩...好希望它顯示的是tty = =
: 我希望在情況5.中, 能判斷出"我正在tty使用screen/tmux"
: 然而此時"tty"這個指令似乎就沒用了
: 請問有甚麼其他判斷方法嗎
: (除了印出$TERM之外
: 因為不論是在x或tty中attach screen, $TERM的內容都是一樣的
: 還有我不希望手動調整$TERM的內容)
目前試出來的分兩個部分 有很多可以改進的地方
(我只用過screen 就針對這部分)
1. 首先在開一個新的screen的狀況
.screenrc最後面加上這兩行
screen # 因為沒開個screen他不給exec 這邊應該有解決方法
exec bash -c 'echo $MYTTY > /tmp/screen_$STY'
在執行的時候使用
$ env MYTTY=`tty` screen
會這麼麻煩是因為只有在.screenrc 執行的時候才有$STY這個變數
會用$STY是為了要讓多個screen不會互相干擾
而一執行之後tty就變成screen裡的了
所以要在執行前先用$MYTTY存起來
2. 在attach的情況
screen -r [id] -X exec bash -c "echo `tty` > /tmp/screen_\$STY" && \
screen -r [id]
這邊是在-X參數就可以下了 所以方便一點 $STY一樣要到screen執行才有效
至於要怎麼alias 大概就比較複雜一點 可能會用function吧
那在screen裡面 讀/tmp/screen_$STY就有了
這麼麻煩是因為想不到怎麼對已經執行的process改他的env var才想到用檔案的方式
也蠻想知道有沒有更好的方法...
--
: 我通常是用"tty"這個指令判斷是否正在tty下
: 例如
: 1. 在tty(1~6)時(假設在tty1)
: user@local_host:~$ tty
: /dev/tty/1 => tty
: 2. 在x11中使用gnome-termial時
: user@local_host:~$ tty
: /dev/pts/7 => pts
: 3. 用putty遠端到遠端Linux伺服器時
: user@remote_host:~$ tty
: /dev/pts/10 => pts
: 4. 在gnome-terminal中使用screen/tmux時
: user@local_host:~$ tty
: /dev/pts/8 => pts
: 不過
: 5. 在tty(1~6)中使用screen/tmux時
: user@local_host:~$ tty
: /dev/pts/8 => 恩...好希望它顯示的是tty = =
: 我希望在情況5.中, 能判斷出"我正在tty使用screen/tmux"
: 然而此時"tty"這個指令似乎就沒用了
: 請問有甚麼其他判斷方法嗎
: (除了印出$TERM之外
: 因為不論是在x或tty中attach screen, $TERM的內容都是一樣的
: 還有我不希望手動調整$TERM的內容)
目前試出來的分兩個部分 有很多可以改進的地方
(我只用過screen 就針對這部分)
1. 首先在開一個新的screen的狀況
.screenrc最後面加上這兩行
screen # 因為沒開個screen他不給exec 這邊應該有解決方法
exec bash -c 'echo $MYTTY > /tmp/screen_$STY'
在執行的時候使用
$ env MYTTY=`tty` screen
會這麼麻煩是因為只有在.screenrc 執行的時候才有$STY這個變數
會用$STY是為了要讓多個screen不會互相干擾
而一執行之後tty就變成screen裡的了
所以要在執行前先用$MYTTY存起來
2. 在attach的情況
screen -r [id] -X exec bash -c "echo `tty` > /tmp/screen_\$STY" && \
screen -r [id]
這邊是在-X參數就可以下了 所以方便一點 $STY一樣要到screen執行才有效
至於要怎麼alias 大概就比較複雜一點 可能會用function吧
那在screen裡面 讀/tmp/screen_$STY就有了
這麼麻煩是因為想不到怎麼對已經執行的process改他的env var才想到用檔案的方式
也蠻想知道有沒有更好的方法...
--
Tags:
Linux
All Comments

By Damian
at 2011-09-23T16:55
at 2011-09-23T16:55
Related Posts
Pidgin無法登入(LMDE)

By Yuri
at 2011-09-21T13:20
at 2011-09-21T13:20
Ubuntu存在但是無法在一開始雙系統登入

By Mary
at 2011-09-21T11:48
at 2011-09-21T11:48
RHEL 6無法進入runlevel 5

By Odelette
at 2011-09-21T01:09
at 2011-09-21T01:09
如何判斷是否正在tty下使用screen/tmux

By Una
at 2011-09-21T00:17
at 2011-09-21T00:17
BBS字型

By Frederic
at 2011-09-20T23:52
at 2011-09-20T23:52