[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: .bashrc is sourced even for non-interactive shells (when run from ss
From: |
Pierre Gaston |
Subject: |
Re: .bashrc is sourced even for non-interactive shells (when run from sshd) |
Date: |
Sun, 3 Jun 2012 06:48:40 +0300 |
On Sun, Jun 3, 2012 at 3:05 AM, Linda Walsh <bash@tlinx.org> wrote:
>
>
> Pierre Gaston wrote:
>
>> On Sat, Jun 2, 2012 at 8:24 PM, Mikel Ward <mikel@mikelward.com> wrote:
>>>
>>> On Sat, Jun 2, 2012 at 10:19 AM, Pierre Gaston <pierre.gaston@gmail.com>
>>> wrote:
>>>>
>>>> On Sat, Jun 2, 2012 at 8:15 PM, Mikel Ward <mikel@mikelward.com> wrote:
>>>>>
>>>>> bash sources .bashrc even for some non-interactive shells.
>>>
>>> ...
>>>>
>>>> "Remote non login non interactive shells"
>>>> Bash has a special compile time option that will cause it to source
>>>> the .bashrc file on non-login, non-interactive ssh sessions.
>>>
>>> IIUC, it was once a compile time option, but it's now hard-coded. �The
>>> isnetconn test doesn't seem to be toggled by any macro.
>>>
>>> � � �if ((run_by_ssh || isnetconn (fileno (stdin))) && shell_level < 2)
>>
>> but run_by_ssh is:
>>
>> #ifdef SSH_SOURCE_BASHRC
>> run_by_ssh = (find_variable ("SSH_CLIENT") != (SHELL_VAR *)0) ||
>> (find_variable ("SSH2_CLIENT") != (SHELL_VAR *)0);
>> #else
>> run_by_ssh = 0;
>> #endif
>>
>
>
> I would say that's broken -- bash can detect if it is
> hooked up to a terminal for input, or not, but chooses not to.
>
> prelude:
>
> ans=("is "{not,}" a tty")
> alias sub=function
> sub echoAns { echo ${ans[$?==0]}; }
> alias }{=else {=then }=fi ?=if
>
> 4 basic cases...
>
> 1)
> Ishtar:...> if ssh ishtar isatty 0 2>/dev/null; { echoAns; }{ echoAns; }
> .bashrc STDIN: is not a tty ( $-=hBc )
> is not a tty
>
>
> 2)
> Ishtar:...> if ssh -T ishtar isatty 0 2>/dev/null; { echoAns; }{ echoAns; }
> .bashrc STDIN: is not a tty ( $-=hBc )
> is not a tty
>
>
> 3)
> Ishtar:...> if ssh -tn ishtar isatty 0 2>/dev/null; { echoAns; }{ echoAns; }
> .bashrc STDIN: is not a tty ( $-=hBc )
> is not a tty
>
>
> 4)
> Ishtar:...> if ssh -t ishtar isatty 0 2>/dev/null; { echoAns; }{ echoAns; }
> .bashrc STDIN: is a tty ( $-=hBc )
> is a tty
>
> While it is arguable whether or not 1 & 2 are 'interactive' (they are but
> not in a character oriented way), #4, by:
> --rcfile file
> Execute commands from file instead of the standard personal
> ini-
> tialization file ~/.bashrc if the shell is interactive
> (see
> INVOCATION below).
> -----------Under invocation:
> 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.
>
>
> By using the isatty test, none of 1-3 should be calling bashrc.
> You can note that the "-i" switch isn't specified at any point.
>
> Minimally I would claim #4 to be a bug, and from the manual, #1 and #2 are
> as
> well. (-n redirects STDIN from /dev/null -- a definite "non-winner for
> interactivity).
In all your examples the shell will be called like: bash -c 'isatty 0
2'. If you use a bash compiled with the above option you can add 'ps
-p$$ -ocmd' at the top of your .bashrc to verify it.
They are all non-interactive because they are called with -c,
disregarding if they are connected to a terminal or not.
- .bashrc is sourced even for non-interactive shells (when run from sshd), Mikel Ward, 2012/06/02
- Re: .bashrc is sourced even for non-interactive shells (when run from sshd), Pierre Gaston, 2012/06/02
- Re: .bashrc is sourced even for non-interactive shells (when run from sshd), Mikel Ward, 2012/06/02
- Re: .bashrc is sourced even for non-interactive shells (when run from sshd), Pierre Gaston, 2012/06/02
- Re: .bashrc is sourced even for non-interactive shells (when run from sshd), Linda Walsh, 2012/06/02
- Re: .bashrc is sourced even for non-interactive shells (when run from sshd),
Pierre Gaston <=
- Re: .bashrc is sourced even for non-interactive shells (when run from sshd), Linda Walsh, 2012/06/03
- Re: .bashrc is sourced even for non-interactive shells (when run from sshd), Pierre Gaston, 2012/06/03
- Re: .bashrc is sourced even for non-interactive shells (when run from sshd), Chet Ramey, 2012/06/04
- Re: .bashrc is sourced even for non-interactive shells (when run from sshd), Steven W. Orr, 2012/06/04
Re: .bashrc is sourced even for non-interactive shells (when run from sshd), Mikel Ward, 2012/06/02