Bash 如何附加或创建屏幕浏览?

Bash 如何附加或创建屏幕浏览?,bash,gnu-screen,Bash,Gnu Screen,我目前正在使用它来启动mutt或irssi: urxvt -name Irssi/Mutt screen -r Irssi/Mutt 目前,在使用我的启动器之前,我必须执行以下操作: screen -S Irssi/Mutt irssi/mutt + Ctrl-a-d 我希望做的是: if [ test_to_see_if_the_screen_exit ] # I need a way to the test then urxvt -name Irssi/Mutt -e screen

我目前正在使用它来启动
mutt
irssi

urxvt -name Irssi/Mutt screen -r Irssi/Mutt
目前,在使用我的启动器之前,我必须执行以下操作:

screen -S Irssi/Mutt irssi/mutt + Ctrl-a-d
我希望做的是:

if [ test_to_see_if_the_screen_exit ]  # I need a way to the test
then
  urxvt -name Irssi/Mutt -e screen -r Irssi/Mutt
else
  create_the_screen_named_Irssi/Mutt_and_detach_it # I need a way to create it
  urxvt -name Irssi/Mutt -e screen -r Irssi/Mutt
endif

有人有解决方案吗?

您可以使用
屏幕列表| grep Irssi/Mutt
查看您的会话是否已经存在

但是让
屏幕
判断会话是否存在更容易:

screen -r Irssi/Mutt || screen -S Irssi/Mutt irssi/mutt
这将尝试连接到现有会话,并在连接失败时创建一个新会话(您不需要立即分离和重新连接,只需留在会话中)

要使
urxvt
运行它,必须明确指定
sh

urxvt -name Irssi/Mutt -e sh -c 'screen -r Irssi/Mutt || screen -S Irssi/Mutt irssi/mutt'

使用
screen-list
screen-ls
显示现有屏幕

我可能会这样做你的
if…endif
位,不过:

screen_opts=""
case $(screen -list Irssi/Mutt | awk '/Irssi/{print $NF}') in
  *Attached*) ;; # not sure what you would want here,
                 # but I would probably do 'screen_opts="-x"'...
  *Detached*) screen_opts="-r" ;;
  *) screen -wipe # if session is dead, clean it up
     screen_opts="-S Irssi/Mutt";;
esac
urxvt -name Irssi/Mutt -e screen ${screen_opts}

这不是答案,而是建议,TMUX比屏幕要好得多。我同时使用了screen和TMUX,TMUX对用户友好得多,灵活性也更高。你有例子吗?我有TMUX,在.bashrc中,
alias t='TMUX attach | | TMUX new'
这有助于连接到现有会话或创建新会话。在tmux会话中,可以有多个窗口,每个窗口运行单独的程序。因此,只要用您想要的内容替换
tmux new
。这个链接将向您展示如何做这很酷,我一定会尝试。您必须使用urxvt的-e选项来启动命令。Thanks@JacobIlyane你说得对。。。我只是复制了pastad的命令。。。现在修好了。