Newsgroup: it.comp.os.unix
Titolo: Problemi di compatibilita' di script tra Unix e Linux

 comandi come per esempio "echo" in questa forma :

Il problema è portare gli script funzionanti sotto SCO in Linux.
Spiego meglio la situazione in Linux:
in /etc/profile oltre alle variabili exportate tipo PATH LIB ecc. ,è
impostato un controllo del genere :
if [ -x /etc/profile.d/*.sh ]
   then
         .  /etc/profile.d/*.sh
fi
Ora in /etc/profile.d ho creato questa funzione:
(echo.sh) il nome di file
echo ()
{
    echo -e $*
}
in questa maniera se io da # digito : echo "CIAO\c" lui mi interpreta
correttamente l'opzione \c, mentre se questa la esegua da uno script,
l'impostazione se la perde. La shell è la Bash.
Per quanto riguarda l'export non si puo' exportare un script come quello di
echo.sh a meno che io lo mandi in escuzione con la sinstassi ". script" e
questo lo fa già il profile di etc.
E' chiaro che tra due sistemi differenti ci siano differenti opzioni e
comportamenti.
Ora io devo cercare di fregare questi diversi comportamenti.
Li dove non esistono certi comandi c'è poco da fare, per il copy per
esempio, su linux non esiste e su sco non posso utilizzare il cp quindi su
linux creo uno script che si chiama copy che non fa altro che fare la cp
come ho gia' fatto per il doscp che chiama mcopy.
Ripeto il mio problema e per le differenze di sintassi e comportamenti tra
comandi esistenti su tutti e due i sistemi.
C'è chi mi ha parlato di csh e ksh per la portabilità ???? IN CHE SENSO ???
Grazie per le risposte.

comando:
bash1.x. (rh61)
Ho cercato moltissimo in passato di fare andare "echo" come "echo -e"
negli script (magari puoi fare ancora qualche prova per vedere se hai
più fortuna con $ENV, $BASH_ENV vedi man bash), ma alla fine ho
rinunciato e l'ho ricompilata.
Anche io ho rh61, se vuoi fare le cose per bene prendi l'srpm e
riproduciti un rpm con una patch aggiuntiva; oppure ricompilatela
semplicemente e via.
==
--- bash-1.14.7.orig/config.h   Sun Feb 26 06:51:59 1995
+++ bash-1.14.7/config.h    Fri May 28 10:55:33 1999
@@ -118,7 +118,7 @@
 /* Define DEFAULT_ECHO_TO_USG if you want the echo builtin to interpret
    the backslash-escape characters by default, like the System V echo.
    This requires that V9_ECHO be defined. */
-/* #define DEFAULT_ECHO_TO_USG */
+#define DEFAULT_ECHO_TO_USG
 #if !defined (V9_ECHO)
 #  undef DEFAULT_ECHO_TO_USG
 #endif
==
In questo modo "echo" sarà sempre uguale a "echo -e" senza bisogno di
settaggi strani.
bash2.x (futura rh7)
Sembra che basti (senza ricompilare) mettere in profile
shopt -s xpg_echo
-- 
giu...@pobox.com

 writes:
E> Il problema è portare gli script funzionanti sotto SCO in Linux.
[ zip ]
E> Per quanto riguarda  l'export non si puo' exportare  un script come
E> quello  di echo.sh  a meno  che  io lo  mandi in  escuzione con  la
E> sinstassi ".  script" e  questo lo  fa già il  profile di  etc.  E'
E> chiaro che tra due sistemi differenti ci siano differenti opzioni e
E> comportamenti.
Il problema e' il seguente:
1) Se esegui uno  script col . (.  script),  viene utilizzata la shell
   corrente, come se inserissi i comandi uno per uno a mano.
2) Quando invece  esegui uno script, viene richiamata  una nuova shell
   (a  seconda di  quanto  indicato  nella prima  riga,  se c'e',  che
   comincia con  #!), la quale non  necessariamente eredita l'ambiente
   della shell  padre (e' per  questo che le variabili  si esportano),
   ne' ha alcun effetto una volta uscita. 
Ora, mentre  la sh esegue  comunque l'/etc/profile, la bash  lo esegue
solo al momento del login, per  cui in uno script con bash non possono
avere effetto  le impostazioni in  /etc/profile e non  possono neppure
venir ereditate dalla shell  padre (eccetto le variabili esportate, ma
non credo si possano esportare le funzioni, di sicuro non gli script).
E> Ora io devo cercare di fregare questi diversi comportamenti.  
L'idea  migliore che  mi  e' venuta  in  mente e'  utilizzare la  bash
(meglio  se 2  e qualcosa)  su  tutti i  sistemi e  tener conto  delle
differenze in  un file separato,  che viene richiamato da  ogni script
con . file_delle_differenze, una  specie di libreria per mascherare le
differenze tra i due sistemi.
L'ultimo punto che resta da affrontare e' la prima riga di ogni script
(che diventa obbligatoria), dato  che probabilmente mentre su linux la
bash e' /bin/bash, su SCO e' /usr/local/bin/bash, pero' dovresti poter
sistemare tutto con un link.
Chiara
--
Nuova moderazione in fase di test - perdonate i disagi