[linux-l] Wie string abgreifen von: echo "string"|program;
Steffen Dettmer
steffen at dett.de
Mi Nov 9 23:21:53 CET 2005
* Thomas Feldhaus wrote on Sat, Nov 05, 2005 at 22:45 +0100:
> Hallo allerseits,
> da ich mit der Terminologie bzgl. Streams, Filediskriptoren, Pipes,
> Standartin usw. etwas wackelig auf den Beinen bin, drücke ich mein
> Problem mal so aus:
>
> echo "string"|program;
> Wie kann ich "string" in einem Bash-, C- oder Perlprogramm in eine
> Variable lesen?
Die Antworten hier im Thread haben mich verwirrt. Hab ich die Frage
nicht verstanden? mmm...
also bash:
steffen at link:~> cat x.sh
#!/bin/bash
read a;
echo "A: $a";
dann
steffen at link:~> echo "123" | ./x.sh
A: 123
in C:
int
main(void)
{
char buffer[10+1] = {0};
fscanf(stdin, "%10s", buffer);
printf("B: `%s'\n", buffer);
exit(0);
}
ist aber Scheisse. Müsste
fscanf(stdin, "%*s", sizeof(buffer) - 1, buffer);
oder so heissen, je nachdem.
> Und, ja klar im bashscript geht's mit "read", aber dann kann ich nicht
> mehr vom Keyboard lesen.
Ja klar, wenn stdin nicht vom Keyboard kommt, klar. Dafür nimmste ja die
pipe.
Du könntest natürlich /dev/tty öffnen oder sowas furchtbares, aber warum
solltest Du Deinem User das antun. STRG-C usw. funktionieren ja noch,
weil controlling tty bleibt, und mehr brauchste ja nicht, wenn über eine
PIPE gesteuert!
Sonst halt ausweichen auf environment:
PARA=WERT ./a.out
$PARA in bash, getenv("PARA") in C, $ENV{PARA} in perl.
oder einfach parameter
./a.out WERT
$1 in bash, 2. main parameter in C, $ARGV[0] in perl.
Man kann es natürlich auch noch ganz anders machen.
oki,
Steffen
--
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.
Mehr Informationen über die Mailingliste linux-l