[Tech] fare il "source" di uno script tcsh da uno script perl
Franco Bagnoli
franco.bagnoli@unifi.it
Lun 20 Gen 2003 07:38:29 CET
On Sun, 19 Jan 2003, Claudio Sicilia wrote:
> Sono un neofita del Perl.
e quindi direi che si tratta di una domanda da lista primipassi.
> Sto provando a scrivere uno script Perl che chiami uno script per la
> shell tcsh.
>
> So che per fare chiamate alla shell devo utilizzare SYSTEM o EXEC ma se
> provo a fare:
>
> system ("source pippo.tcsh");
>
> mi appare un errore che dice:
>
> can't spawn source: file or directory not found?
system non fa necessariamente una chiamata alla shell, come ti dice
perldoc -f system
If there is
only one scalar argument, the argument is checked for shell
metacharacters, and if there are any, the entire argument is
passed to the system's command shell for parsing (this is
"/bin/sh -c" on Unix platforms, but varies on other platforms).
If there are no shell metacharacters in the argument, it is
split into words and passed directly to "execvp", which is
more efficient.
quindi dato che nella tua stringa non ci sono metacaratteri viene
interpretata come se tu chiamassi il programma "source" (mentre invece è
un comando dello shell). Inoltre normalmente lo shell chiamato è sh (e
quindi bash) non tcsh. Quindi dovresti chiamare
system('/bin/tcsh source pippo.tcsh')
ma quale è lo scopo di chiamare source? per eseguire lo script basta che
tu metta in cima allo script
#!/bin/tcsh
(prima riga) e tu lo renda eseguibile, e poi chiami
system('pippo.tcsh')
oppure
system('/bin/tcsh pippo.tcsh')
se invece in pippo.tcsh definisci delle variabili di ambiente che vuoi
importare, allora non ti funziona perché le variabili appartengono
allo shell, e vengono perse quando lo shell finisce.
--
Franco Bagnoli (franchino) <franco.bagnoli@unifi.it> (bagnoli@dma.unifi.it)
virtual location: Dipartimento di Energetica "S. Stecco"
real location: Dip. Matematica Applicata "G. Sansone", Universita' Firenze,
Via S. Marta, 3 I-50139 Firenze, Italy. Tel. +39 0554796422, fax: +39 055471787
GPG Key fingerprint = 169D 9EA5 8FD3 7EDA E43A 9830 255F BCEC 0D63 3728
Maggiori informazioni sulla lista
flug-tech