10

I'm running Ubuntu 14.04 (Cinnamon Mint 17.1) with Bash. Every time I open a new terminal window, I enter screen to start the screen window manager, but I would like the shell to do this for me.

I believe I need to modify .bashrc instead of .profile, so it starts on every new terminal window, not just on logon. So I've added the following to the end of .bashrc, to replace the shell process:

exec /usr/bin/screen -q

When I start a new terminal window:

  • Usually, I get a blank window with a flashing cursor, and the Bash prompt only appears after I press Ctrl+C.
  • Sometimes, the terminal window closes immediately, when I press Ctrl+C, or when I resize the terminal window.
  • Sometimes, I get a Bash prompt with no $LS_COLORS (though it's hard to reproduce this, so I'm not entirely sure when or why it happens).

Can anyone explain why this is failing for me, and suggest a solution?

Thanks,

Huw

9
  • You might wanna add a '&' to end of command. Commented Sep 17, 2015 at 8:59
  • Is running screen on top of bash a possibility? I.e. simply screen -q, I've always had problems on running commands on top of gnome-terminal directly, I'm pretty sure it has something to do with it.
    – kos
    Commented Sep 17, 2015 at 9:12
  • @kos: No, I already tried that. I get the same "blank screen with Bash prompt on Ctrl+C" behaviour, but then I can't close the terminal window with Ctrl+D. Commented Sep 17, 2015 at 9:15
  • @WeareBorg: I get a Bash prompt with Must be connected to a terminal., and screen does not start at all. Commented Sep 17, 2015 at 9:17
  • This is the cowsay I have in bashrc which I have added, maybe it helps as I see fortune output everytime I open a new tab : pastebin.com/25fPSr8n Commented Sep 17, 2015 at 9:19

1 Answer 1

11

When screen starts, the first window launches your shell, and you've told your shell to start screen. Then, when screen starts, the first window launches your shell, and you've told your shell to start screen. Then, when screen starts ...

Lather, rinse, repeat.

screen sets the $TERM variable to "screen", so to avoid endlessly recursive invocations of screen ("turtles all the way down") your .bashrc can end with:

[[ $TERM != "screen" ]] && exec screen -q
3
  • 2
    Just in case someone is trying to replicate this in Ubuntu 16.04 with the default terminal: add this to your .bashrc [[ $TERM != "screen.xterm-256color" ]] && exec screen -q
    – bluppfisk
    Commented Feb 3, 2018 at 2:42
  • 3
    To check with what value you have to compare $TERM, run screen and type echo $TERM before editing .bashrc.
    – Pierre
    Commented Aug 26, 2019 at 7:29
  • Definitely more robust to call exec screen -q on exact value of '$TERM` before you start screen like: [[ $TERM = "xterm-256color" ]] && exec screen -q
    – tonylo
    Commented Sep 16, 2021 at 18:23

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .