Bash: Datenstromumleitung per variable setzen [ erledigt ]

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
FreakyFrank
Beiträge: 28
Registriert: 12.10.2004 15:12:41

Bash: Datenstromumleitung per variable setzen [ erledigt ]

Beitrag von FreakyFrank » 21.12.2004 09:37:07

Hallo,
mal ne Frage ob ich in einem shellskript wenn entsprechend eine variable gesetzt ist ich die standarausgabe auf /dev/zero umleiten kann.
Stell mir das so ungefähr wie im folgenden Code vor, welcher aber so nicht funktioniert. Wäre dankbar für jeden Tipp.

Gruß Frank

Code: Alles auswählen

#!/bin/sh
verbose="/dev/zero"
#Ausgabe auf verbose
if [  "$1" = "-v" ] 
then
verbose=""
fi
#Testausgabe eines Programms
ls * >&1 $verbose 

Zuletzt geändert von FreakyFrank am 21.12.2004 12:39:28, insgesamt 1-mal geändert.

srolle
Beiträge: 325
Registriert: 09.09.2003 10:08:13
Wohnort: Zeitz (bei Leipzig)

Beitrag von srolle » 21.12.2004 10:21:39

Hi,

es sollte aber funktionieren. Verwende statt /dev/zero /dev/null. Damit sieht das ganze so aus:

Code: Alles auswählen

#!/bin/bash
verbose="/dev/null"
ls * > $verbose # leite STDOUT nach /dev/null
ls * > $verbose 2>&1 # leite STDOUT und Fehlerausgabe nach /dev/null

Benutzeravatar
FreakyFrank
Beiträge: 28
Registriert: 12.10.2004 15:12:41

Beitrag von FreakyFrank » 21.12.2004 10:44:33

Deine Version funktioniert auch.

Code: Alles auswählen

#!bin/sh
verbose="/dev/null"
#Ausgabe auf verbose
if [  "$1" = "-v" ]
then
verbose=""
fi
ls * > $verbose # leite STDOUT nach /dev/null
ls * > $verbose 2>&1 # leite STDOUT und Fehlerausgabe nach /dev/null
naja wenn ich das soweit in mein skript übernehme und es mit der option -v aufrufe, so daß $verbose="" ist, bekomme ich halt ne fehlermeldung.

$verbose: ambiguous redirect

Mit dem Deskriptor >&1 funzt es auch, zumindest wenn ich es in einer Konsole eingebe.
Im skript selber wird ls immer auf konsole ausgegeben.

Frank

srolle
Beiträge: 325
Registriert: 09.09.2003 10:08:13
Wohnort: Zeitz (bei Leipzig)

Beitrag von srolle » 21.12.2004 10:59:33

Wenn Du die Option -v angibst wird die Variable auf "" (also leer) gesetzt. Dies ist gleichbedeutend mit

Code: Alles auswählen

ls * >
Dies fuehrt zu einer Fehlermeldung!

Vielleicht solltest Du es so probieren:

Code: Alles auswählen

if [  "$1" = "-v" ]; then
    ls * > $verbose 2>&1
else
    ls *
fi

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 21.12.2004 11:59:54

eine alternative Lösung, bei der du ls nicht in eine if-Anweisung verpacken mußt:

Code: Alles auswählen

#!/bin/sh
if [  "$1" = "-v" ]
then
verbose=/dev/stdout
else
verbose=/dev/null
fi

ls *l >$verbose 2>&1

srolle
Beiträge: 325
Registriert: 09.09.2003 10:08:13
Wohnort: Zeitz (bei Leipzig)

Beitrag von srolle » 21.12.2004 12:28:41

Also, bei mir gibt es kein /dev/stdout auf dem System.

Benutzeravatar
FreakyFrank
Beiträge: 28
Registriert: 12.10.2004 15:12:41

Beitrag von FreakyFrank » 21.12.2004 12:38:18

Super GMS, danke dir!
Genau das was ich brauche!

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 21.12.2004 12:49:11

srolle hat geschrieben:Also, bei mir gibt es kein /dev/stdout auf dem System.
dann hast du einen Fehler im System

srolle
Beiträge: 325
Registriert: 09.09.2003 10:08:13
Wohnort: Zeitz (bei Leipzig)

Beitrag von srolle » 21.12.2004 12:51:30

Ich habe es gefunden. War mein Fehler. Danke fuer den Tip!!!

Antworten