[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