[linux] Re: Uitvoeren van commando's in screen bij opstarten

Fred Mobach fred op mobach.nl
Zo Aug 3 18:14:26 CEST 2008


On Saturday 02 August 2008 19:33, Cecil Westerhof wrote:
> Op za, 02-08-2008 te 17:27 +0200, schreef Fred Mobach:
> > On Friday 01 August 2008 11:58, Cecil Westerhof wrote:
> > > Bij het opstarten van screen worden er meerdere screen sessie
> > > geopend -door middel van de instellingen in .screenrc- waarin
> > > verschillende programma's draaien. Indien een programma wordt
> > > afgebroken kan met '${COMMAND}' dat programma weer worden
> > > opgestart. Vanwege DRY (Do not Repeat Yourself) zou ik willen
> > > werken met:
> > >         setenv COMMAND 'tg-admin shell'
> > >         screen -t shell
> > >         exec "${COMMAND}"
> >
> > Werkt het wel met exec ${COMMAND} ?
>
> Nope, dat was wat ik als eerste gebruikte. Toen dat niet werkte ben
> ik met quotes gaan werken.

Vreemd, ik zie :
fred op servans:~> bash
fred op servans:~> ps
  PID TTY          TIME CMD
32392 pts/45   00:00:00 bash
32436 pts/45   00:00:00 bash
32443 pts/45   00:00:00 ps
fred op servans:~> export COMMAND="date +%s"
fred op servans:~> $COMMAND
1217779727
fred op servans:~> ps
  PID TTY          TIME CMD
32392 pts/45   00:00:00 bash
32436 pts/45   00:00:00 bash
32451 pts/45   00:00:00 ps
--> variabele substitutie door de shell netjes uitgevoerd, beide
--> bash sessies nog actief.
fred op servans:~> exec $COMMAND
1217779744
fred op servans:~> ps
  PID TTY          TIME CMD
32392 pts/45   00:00:00 bash
32457 pts/45   00:00:00 ps
fred op servans:~>
--> keurige uitvoering van exec door shell (vervangt shell door date)
--> en correcte uitvoering van het commando inclusief argument.

Precies wat ik verwachtte.

> > > Een ander probleem is dat per screen in .screenrc maar één keer
> > > een commando d.m.v. exec uit kan worden gevoerd. Dit kan
> > > natuurlijk op worden gelost door een script aan te roepen met
> > > exec, maar is er een andere manier? Volgens de documentatie zou
> > > het met eval moeten kunnen, maar dat werkt niet.
> > > Als ik in .screenrc opneem:
> > >         screen -t testing
> > >         eval /bin/date '/bin/echo tweede commando' bin/date
> >
> > Werkt het wel met
> >   eval /bin/date && '/bin/echo tweede commando' && bin/date
>
> Nope, want eval zegt meteen al dat het /bin/date niet kent. :-{
>
> En "exec /bin/date && '/bin/echo tweede commando' && bin/date" geeft:
> 	bin/date: too many non-option arguments: /bin/echo tweede commando

Dat is logisch, hier verwar je exec met het eerder aangegeven eval.

fred op servans:~> eval /bin/date && false
Sun Aug  3 18:02:47 CEST 2008
fred op servans:~> echo $?
1
fred op servans:~> eval false || date
Sun Aug  3 18:04:08 CEST 2008
fred op servans:~> echo $?
0
fred op servans:~>

Ligt het soms aan de aanwezige environment variabelen ?
-- 
Fred Mobach - fred op mobach.nl - postmaster op mobach.nl
website : http://fred.mobach.nl
 .... In God we trust ....
 .. The rest we monitor ..



More information about the Linux mailing list