Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 17 May 1999 15:35:45 -0700 (PDT)
From:      David Wolfskill <dhw@whistle.com>
Cc:        freebsd-newbies@FreeBSD.ORG
Subject:   Re: Newbie tip
Message-ID:  <199905172235.PAA20947@pau-amma.whistle.com>
In-Reply-To: <Pine.LNX.3.96.990516214219.14347A-100000@petra.hos.u-szeged.hu>

next in thread | previous in thread | raw e-mail | index | archive | help
>Date: Sun, 16 May 1999 22:01:21 +0200 (CEST)
>From: Adam Szilveszter <sziszi@petra.hos.u-szeged.hu>

>> >Caution: As many have said here already, don't change the root shell to
>> >anything other from sh or csh because that's a really bad idea.

>> Why is it a bad idea?

In addition to other concerns, if one is using a network of machines
under "sufficiently loose control", it may well happen that one's
favorite shell isn't installed on at least one such machine.

Further, unless the login shell is listed in /etc/shells, that will
cause problems if you want to change your password or use FTP.
(Actually, in our environment, the former concern is an issue for the
NIS server(s), rather than the individual machines being used... which I
found a little surprising.  I noticed it when one of my colleagues, who
uses bash, tried to change his password.  And another colleague had
trouble using "sudo" while using bash as his shell; that cleared up
after he explicitly invoked "sh", then invoked "sudo".)

One of the tricks I have taken to using to circumvent much of this is to
use /bin/csh as my "login shell"... but in ~/.cshrc, I cobbled up some
code that "execs" tcsh if it can be found (and if it's not already
running -- that part gets a little tricky).

That way, I can use FTP, change my password, and login to various
machines without being worried that my login shell won't be found, while
still taking advantage of tcsh when it's available.

The logic in question looks like:


# Try to short-circuit some gunk.  Only exec tcsh if interactive; bail if
# doing a "which".

if ( $?prompt != 0 ) then
  if { test -z "$prompt" } exit
  if ( ! $?HOSTTYPE ) then
    set tcsh = `which tcsh`
    if ( $?tcsh && "${tcsh}" != "$SHELL" && { test -x ${tcsh} } ) then
      setenv SHELL "$tcsh"
      exec $tcsh
    endif
  endif
endif



Note:  please do *not* just blindly use the above.  I went ahead and
posted it in case someone might find it worth tearing apart and
understanding... and maybe improving.

Cheers,
david
-- 
David Wolfskill		UNIX System Administrator
dhw@whistle.com		voice: (650) 577-7158	pager: (650) 371-4621


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-newbies" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199905172235.PAA20947>