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 -- FreeBSD mailing list (users-l@freebsd.cz) http://www.freebsd.cz/listserv/listinfo/users-l