Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: zsh portable script

* FranÃois Revol (Tue, 20 Jul 2010 16:07:32 +0200)
> Le 20 juil. 2010 Ã 15:53, Thorsten Kampe a Ãcrit :
> > * Joke de Buhr (Mon, 12 Jul 2010 17:37:19 +0200)
> >> On Monday 12 July 2010 16:46:22 Atom Smasher wrote:
> >>> on freebsd, zsh installs as /usr/local/bin/zsh. on linux (and most
> >>> other systems?) it installs as /usr/bin/zsh.
> >>> 
> >>> what's the best way to make zsh script portable between linux and
> >>> freebsd?
> >>> 
> >>> i could start the script with:
> >>> 	#!/usr/bin/env zsh
> >>> 
> >>> or i could specify that the script be executed as:
> >>> 	zsh script
> >>> 
> >>> is there a better way?
> >> 
> >> Using env doesn't solve the problem either. There is no guarantee the "env" 
> >> program is installed under /usr/bin/env.
> > 
> > It does solve the problem that's why it's used in (shell) scripting[1]. 
> No it does not.
> BeOS never had any /usr.
> Haiku doesn't either.

The question was "what's the best way to make zsh script portable 
between linux and freebsd?" Why would the original poster care about OSs 
which are either dead for ten years or haven't left alpha stage yet?

If you want to be generally "portable" then you wouldn't write a zsh 
script in the first place: "When portability is an issue: you can rely 
on the Bourne shell existing anywhere. Scripting languages like Perl and 
even the newer shells like bash and zsh are potentially unavailable" 
("From Bash to Z Shell" - Oliver Kiddle, Jerry Peek and Peter 

Trying to create a script that would magically "run everywhere" is never 
going to work. For a "real life" description see here:
"While the transition to sh and general UNIX compatibility has been a 
bumpy ride, it has also been a tremendous learning experience. Creating 
a single script that runs on all of these platforms has been very tricky 
indeed, mainly because I simply don't have access to most of these 
operating systems! Thankfully, keychain users from around the globe do, 
and many have provided great assistance in identifying compatibility 
problems and submitting patches to fix them."[1]

All these compatibility changes come with a heavy price: they make the 
code much less readable (as described under "Shell compatibility 

The lesson here is: if you want a Zsh script that runs on the major 
Linux distributions and on FreeBSD then create one that does exactly 
that. Don't try to "over-engineer" to make it run everywhere if you 
don't have the ressources (like lots of contributors) and especially: 
dont't try to make it run on a platform you don't have access to (and on 
which the script is never supposed to run, anyway).

[1] http://www.gentoo.org/doc/en/articles/openssh-key-management-p3.xml

Messages sorted by: Reverse Date, Date, Thread, Author