nastaveni bashe jako defautlt shell
Dan Lukes
dan at obluda.cz
Sat Dec 15 14:52:08 CET 2007
Daniel Gerzo napsal/wrote, On 12/15/07 12:01:
>>> #! /usr/local/bin/bash. Toto som riesil hrubou silou:
>> Lze ve skriptu definovat shell bez zavislosti na jeho umisteni v OS?
> napr. #!/usr/bin/env bash
No, to je sice zdanlive jasna odpoved na jasnou otazku, ale obavam se,
ze ses nezabyval smyslem puvodni otazky. A navic je to odpoved kruhem.
Zavislost scriptu na pevnem umisteni jsi nahradil zavislosti na pevnem
umisteni 'env'.
Jestli predpokladas, ze na FreeBSD je vzdy env v /usr/bin pak to uz
muzeme rovnou predpokladat, ze bash (pokud je vubec pritomen) je v
/usr/local/bin
Ja ale preedpokladam, v pozadi otazky byl pozadavek na portabilnost
scriptu mezi ruznymi OS (protoze v ramci FreeBSDS je tam opravdu
jednodussi napsat proste /usr/local/bin/bash).
A pro jine OS tohle reseni reseni neni - jednak neni jiste, jestli tam
'env' vubec bude, a kdyz uz ano, zda bude delat to co predpokladas, a
kdyz uz ano, zda bude prave v /usr/bin
Obavam se, ze na puvodni otazku neexistuje obecna odpoved - zalezi an
tom jak je to v systemu implementovano - zda bude nebo nebude
prohledavat PATH
Castecnou odpoved ma POSIX - jen ten predpoklada, ze spustitelne
programy se do systemu nekopiruji - ze se to nej instaluji. Pak uz to je
jednoduche:
--------------
Furthermore, on systems that support executable scripts (the "#!"
construct), it is recommended that applications using executable scripts
install them using getconf -v to determine the shell pathname and update
the "#!" script appropriately as it is being installed (for example,
with sed). For example:
#
# Installation time script to install correct POSIX shell pathname
#
# Get list of paths to check
#
Sifs=$IFS
IFS=:
set $(getconf PATH)
IFS=$Sifs
#
# Check each path for 'sh'
#
for i in $@
do
if [ -f ${i}/sh ];
then
Pshell=${i}/sh
fi
done
#
# This is the list of scripts to update. They should be of the
# form '${name}.source' and will be transformed to '${name}'.
# Each script should begin:
#
# !INSTALLSHELLPATH -p
#
scripts="a b c"
#
# Transform each script
#
for i in ${scripts}
do
sed -e "s|INSTALLSHELLPATH|${Pshell}|" < ${i}.source > ${i}
done
--------------
Dan
--
Dan Lukes SISAL MFF UK
AKA: dan at obluda.cz, dan at freebsd.cz, dan at (kolej.)mff.cuni.cz
More information about the Users-l
mailing list