From owner-freebsd-questions@freebsd.org Wed Feb 1 00:49:05 2017 Return-Path: Delivered-To: freebsd-questions@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 75B5DCC6767 for ; Wed, 1 Feb 2017 00:49:05 +0000 (UTC) (envelope-from freebsd@edvax.de) Received: from mailrelay10.qsc.de (mailrelay10.qsc.de [212.99.163.152]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "*.antispameurope.com", Issuer "TeleSec ServerPass DE-2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id F0F90BC4 for ; Wed, 1 Feb 2017 00:49:04 +0000 (UTC) (envelope-from freebsd@edvax.de) Received: from mx01.qsc.de ([213.148.129.14]) by mailrelay10.qsc.de; Wed, 01 Feb 2017 01:49:07 +0100 Received: from r56.edvax.de (port-92-195-126-61.dynamic.qsc.de [92.195.126.61]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx01.qsc.de (Postfix) with ESMTPS id B3EFF3CC3F; Wed, 1 Feb 2017 01:48:59 +0100 (CET) Received: from r56.edvax.de (localhost [127.0.0.1]) by r56.edvax.de (8.14.5/8.14.5) with SMTP id v110mwSS004290; Wed, 1 Feb 2017 01:48:58 +0100 (CET) (envelope-from freebsd@edvax.de) Date: Wed, 1 Feb 2017 01:48:58 +0100 From: Polytropon To: Warren Block Cc: byrnejb@harte-lyne.ca, freebsd-questions@freebsd.org Subject: Re: Variable assignment in sh Message-Id: <20170201014858.eec196d0.freebsd@edvax.de> In-Reply-To: References: <20170131161824.a9f1ef46.freebsd@edvax.de> <20170131185103.7f911dfb.freebsd@edvax.de> <5f51e2c3bdb8a20c6a7786c2b345c957.squirrel@webmail.harte-lyne.ca> Reply-To: Polytropon Organization: EDVAX X-Mailer: Sylpheed 3.1.1 (GTK+ 2.24.5; i386-portbld-freebsd8.2) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-cloud-security-sender: freebsd@edvax.de X-cloud-security-recipient: freebsd-questions@freebsd.org X-cloud-security-Virusscan: CLEAN X-cloud-security-disclaimer: This E-Mail was scanned by E-Mailservice on mailrelay10.qsc.de with 35B7A68343E X-cloud-security-connect: mx01.qsc.de[213.148.129.14], TLS=1, IP=213.148.129.14 X-cloud-security: scantime:.3015 X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Feb 2017 00:49:05 -0000 On Tue, 31 Jan 2017 14:51:20 -0700 (MST), Warren Block wrote: > On Tue, 31 Jan 2017, James B. Byrne via freebsd-questions wrote: > > > > > On Tue, January 31, 2017 12:51, Polytropon wrote: > >> On Tue, 31 Jan 2017 12:11:49 -0500, James B. Byrne via > >> freebsd-questions wrote: > >>> > >>> In any case, I now have set the shell in the root crontab file > >>> explicitly to /usr/local/bin/bash in hopes of avoiding this problem > >>> in the future. > >> > >> That _might_ introduce problems in the future when bash is not > >> available. My suggestion: Use /bin/sh for scripting except you > >> need to rely on a "bash-ism", a feature that bash can provide, > >> but sh cannot. However, you can use bash interactively to test > >> sh commands, there is "backward compatibility" (bash can be seen > >> as a superset of sh). > >> > > > > How would bash become unavailable on this particular system without > > someone specifically removing it? > > Boot into single user mode. /usr is not (necessarily) mounted, and > doing anything could be challenging. > > If you absolutely must have bash for root, leave root's shell as csh and > run bash from within .cshrc. If /usr is not mounted, it will just fail > and leave you with a chance to fix things from a running csh. A possible addition to /root/.login (a file which csh will execute when being invoked as a login shell) could be: /bin/test -x /usr/local/bin/bash && /usr/local/bin/bash In case the executable is not available, you will still get a working csh instance. > It's important to note that shells are two things, an interactive user > interface, and a shell script interpreter. Thanks to a rich selection, > one program does not have to be used for both. For example, I use csh > along with a large autocompletion file and some aliases and it works > very well for that. There are a few people who consider the interactive behaviour of csh being superior to that of bash, even though bash definitely has better handling for redirection. On the other hand, many users seem to prefer zsh (which is a great interactive shell as well). FreeBSD does not force a specific shell upon the user. However, it makes sense to not mess with system accounts because that might trigger the shot into your foot in some worst case scenario you cannot imagine today. :-) Also note that toor (also a UID 0 user account) can have bash as the login shell without interfering that "worst case imagination". > I would not write scripts for csh, though, because > the built-in script implementation is not great. And it's considered harmful; see "Csh Programming Considered Harmful" by Tom Christiansen: http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot > Not a problem, since > just putting #!/bin/sh as the first line of a script causes it to run > with the standard sh interpreter. Additionally, it helps to write portable scripts (across different operating systems), not just for FreeBSD systems which might or might not have bash installed (at a non- standard place). ;-) -- Polytropon Magdeburg, Germany Happy FreeBSD user since 4.0 Andra moi ennepe, Mousa, ...