[linux] Re: bash-bug

Daniel C. von Asmuth asmuth op bakunin.xs4all.nl
Zo Sep 28 12:39:13 CEST 2014


Aldus schreef jjge op Sat, Sep 27, 2014 at 11:28:10AM +0200:
> 
> On 09/26/2014 08:41 PM, Daniel C. von Asmuth wrote:
> > Aldus schreef jjge op Fri, Sep 26, 2014 at 06:28:16PM +0200:
> >> On 09/26/2014 05:04 PM, Bart-Jan Vrielink wrote:
> >>> Hans,
> >>>
> >>> Als je scripts niet in een andere shell werken, dan moet je expliciet aangeven dat ze #!/bin/bash nodig hebben, niet #!/bin/sh.
> >>>
> >>> Een belangrijke reden om niet bash als default shell te willen hebben (afgezien van deze bug) is dat bash behoorlijk veel resources vraagt. dash is veel sneller.
> >>>
> >>> Verder wijkt Linux met bash nogal af van de standaard Unix shell, en is het (als je ook op andere Unix smaken verblijft) handiger om een shell die zo POSIX compatible als mogelijk is. Bash is dat duidelijk niet.
> > GNU betekent niet voor niets: GNU is Not Unix.
> >
> >>> Mijn voorkeur is bash voor interactief werk, standaard shell voor scripts (tenzij je bewust Bash features nodig hebt). In alle gevallen specificeren wat je nodig hebt.
> >> Maarre.. welke shell is standaard? Ik werk zelf met Slackware, en daar
> >> staat /bin/sh gewoon door naar bash. En volgens mij is Slackware een
> >> heel conservatieve distro...
> > Dat is algemeen zo op Linux. Op Solaris is /bin/sh de Bourne shell en de
> > Korn Shell /bin/ksh is de standaard login shell. Allicht zijn er gebruikers
> > die de voorkeur geven aan bash, tcsh of zsh.
> 
> Ja, maar, er werd hier verwezen naar "de standaardshell". En dus is mijn 
> vraag: wie is dat?

Dat heb ik hierboven al gezegd. Als er zoiets bestaat in Unix dan is het 
/bin/sh, maar onder Linux is dat altijd een symbolic link naar /bin/bash. 
Wannneer je onder Linux /bin/sh start, krijg je de GNU Bash shell, maar
die zal zijn gedrag zodanig aanpassen dat het zoveel mogelijk op de originele
Bourne Shell lijkt.

Niet verwarren met de login shell, die standaard wordt gebruikt als de 
systeembeheerder niets explciet vermeldt wanneer die je account aanmaakt. 
Dat zal onder Unix vaak /bin/ksh zijn, maar /bin/bash onder Linux.

Als een shell schript geen expliciete command interpreter vermeldt, dan zal 
de actieve shell een subshell (kopie van zichzelf) starten. Als een binair
programma (bijvoorbeeld vi als je begint met ':!') een Unix commando wil
uitvoeren, dan gebruikt het de system() functie, die de opdrachtregel 
meegeeft aan een nieuwe kopie van /bin/sh. Als een opdracht door de Cron
daemon wordt uitgevoerd, gebeurt dat eveneens in een /bin/sh.

Met vriendelijke groet,



Daniel von Asmuth
 

-- 
	
		People who bought this story also bought....



More information about the Linux mailing list