Skip to main content

linux - Why do we have login, non-login, interactive, and non-interactive bash shells?


So the bash man pages explain what login and interactive shells are:



A login shell is one whose first character of argument zero is a -, or one started with the --login option.


An interactive shell is one started without non-option arguments and without the -c option whose standard input and error are both connected to terminals (as determined by isatty(3)), or one started with the -i option. PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state.



I think this means we can have 4 different types of shells:



  • Interactive login shells,

  • Non-interactive login shells,

  • Interactive non-login shells,

  • Non-interactive non-login shells


But why do we have interactive/non-interactive and login/non-login shells in the first place? Why the variety? What would we lose if we only had one type of shell?


Also when trying to determine if I am in a login shell by running echo $-, it outputs:


himBH

Some of these flags are explained here, but h, H, and m are not explained. Is there a place that describes all these flags?



Answer



These are my thoughts on the different "types"of shells -- unfortunately I didn't witnessed the rise of the Un*x right from the beginning (I assume this concept is grown historically to a good extend), so please be critical.



  • When I log into a system (nowadays via the graphical X login), there might be some tasks which should run once, e.g. establish a connection to some kind of server, present me a the today's todo list, autostart some commands, etc. This shouldn't happed every time I open up a new terminal. So there's a set of config files (/etc/profile, ~/.bash_login and so on, refer to the manual for an accurate list) sourced only by login shells.

  • Accordingly, to close the connections, kill some programs, run a backup script there is ~/.bash_logout when the login shell exists.

  • so, the "normal" shell I use in a terminal, shouldn't ba a login shell, but nevertheless should read my personal preferences from ~/.bashrc, because I want my keybindings to interact with the shell -- hence this is an interactive, non-login shell.

  • and last, but not least when bash is used for scripting, neither of this is important. bash should start as fast as it can, i.e. shouldn't read any config files. This is a non-interactive, non-login shell.


So, my answer to your question What would we lose if we only had one type of shell? is in one word: "Flexibility."




The answer to your second question is easy:


$- lists the current set of options. These can either be set by command line parameters to bash or via the set builtin. So you have to look at two places in the manual:




  • OPTIONS section:


    -i        If the -i option is present, the shell is interactive.


  • SHELL BUILTIN COMMANDS section, subsection set:


    -h      Remember the location of commands as they are looked up for execution.  This is enabled by default.
    -m Monitor mode. Job control is enabled. This option is on by default for interactive shells on systems that sup‐
    port it (see JOB CONTROL above). Background processes run in a separate process group and a line containing
    their exit status is printed upon their completion.
    -B The shell performs brace expansion (see Brace Expansion above). This is on by default.
    -H Enable ! style history substitution. This option is on by default when the shell is interactive.


Comments

Popular Posts

How do I transmit a single hexadecimal value serial data in PuTTY using an Alt code?

I am trying to sent a specific hexadecimal value across a serial COM port using PuTTY. Specifically, I want to send the hex codes 9C, B6, FC, and 8B. I have looked up the Alt codes for these and they are 156, 182, 252, and 139 respectively. However, whenever I input the Alt codes, a preceding hex value of C2 is sent before 9C, B6, and 8B so the values that are sent are C2 9C, C2 B6, and C2 8B. The value for FC is changed to C3 FC. Why are these values being placed before the hex value and why is FC being changed altogether? To me, it seems like there is a problem internally converting the Alt code to hex. Is there a way to directly input hex values without using Alt codes in PuTTY? Answer What you're seeing is just ordinary text character set conversion. As far as PuTTY is concerned, you are typing (and reading) text , not raw binary data, therefore it has to convert the text to bytes in whatever configured character set before sending it over the wire. In other words, when y...

linux - Extract/save a mail attachment using bash

Using normal bash tools (ie, built-ins or commonly-available command-line tools), is it possible, and how to extract/save attachments on emails? For example, say I have a nightly report which arrives via email but is a zip archive of several log files. I want to save all those zips into a backup directory. How would I accomplish that? Answer If you're aiming for portability, beware that there are several different versions of mail(1) and mailx(1) . There's a POSIX mailx command, but with very few requirements. And none of the implementations I have seem to parse attachments anyway. You might have the mpack package . Its munpack command saves all parts of a MIME message into separate files, then all you have to do is save the interesting parts and clean up the rest. There's also metamail . An equivalent of munpack is metamail -wy .

performance - Single Threaded Qaud Core v.s Hyper-Threading Dual Core

Let's say we have two CPUs, One is Quad Core 3.2 Ghz with 4 Cores, and We have a Dual Core 3.2 Ghz with 2 Cores with 2 threads in each Core (Hyper-Threading). My assumption as a programmer will be, the 4 cores 4 threads should perform faster than 2 cores 4 threads since the second CPU needs to switch between threads in order to emulate 4 cores while the first one doesn't need to perform such switching as each core can perform independently and individually. I want to confirm that my assumption is true, if not please explain why one is better than the other. Answer I do believe thats true - since hyper threading does share some elements - specifically the main execution resources, you'll be able to run 4 full threads at once, rather than waiting for those resources to be freed up. The point of HT is to get better performance with a smaller use of die area - your quad core would generally be a bigger chip - say almost twice as large, than a non HT dual core chip, while a HT...

freeze - How do I stop windows 8.1 from freezing when the screen locks

This happens to me on a regular basis if I leave the computer for upwards of 10 minutes. It didnt do so at first but started after a couple of days. This is possibly related to further windows updates although nothing seems to tie in obviously when looking at my update history. I have to hold the power button in to power off. If the screens have switched off aswell they wont come back on, if they haven't I see the login picture and can move the mouse pointer but nothing happens and no combination of keyboard mashes or mouse clicks lets me see the login prompt. In the event log (type event viewer into the start menu) under system before every Critical problem (me powering down the machine without restarting) I get distributedCOM errors talking about this guid: "The server {BF6C1E47-86EC-4194-9CE5-13C15DCB2001} did not register with DCOM within the required timeout." I also get the same error for this 1B1F472E-3221-4826-97DB-2C2324D389AE. This seems to be a common theme and...