Finde das Bashism und beseitige es

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
inne
Beiträge: 3273
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Finde das Bashism und beseitige es

Beitrag von inne » 14.07.2018 22:45:54

Wo ist das Bashism und wie kann es beseitgt werden:

Code: Alles auswählen

$ bash -c "echo c | grep -E -f - <(echo abc)"
abc

Code: Alles auswählen

$ sh -c "echo c | grep -E -f - <(echo abc)"
sh: 1: Syntax error: "(" unexpected
PS: Es soll bitte ein Einzeiler nach diesem Muster bleiben, denn das echo c ist nur hier im Beispiel so und eigentlich ein here-doc.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Finde das Bashism und beseitige es

Beitrag von Meillo » 14.07.2018 22:52:02

Der Bashism ist ``<(...)''.

Beschreibe was genau du tun willst. Und liefere bitte realitaetsnahe Werte fuer die beiden Strings/Dateien. Auf so einem abstrakten Level finde ich es schwer eine passende Loesung zu konstruieren.
Use ed once in a while!

inne
Beiträge: 3273
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Finde das Bashism und beseitige es

Beitrag von inne » 14.07.2018 23:02:39

Was du tun kannst ist:

Code: Alles auswählen

echo b | grep -E 'a|b|c' | cat | cat
Das koennte bei langen RegExps allerdings etwas unleserlich werden.

Man hat halt nur ein Stdin, folglich musst du einen der beiden Strings entweder direkt als Argument uebergeben (wie hier die Regexps) oder in eine temporaere Datei schreiben (wie <(...) das macht, bloss bekommst du davon nichts mit ... aber lies dir die Funktionsweise in der Manpage der Bash durch, da steht genau was passiert).

inne
Beiträge: 3273
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Finde das Bashism und beseitige es

Beitrag von inne » 15.07.2018 01:40:07

Nun-Ja das ist wohl die Lösung und eben weil die RegExps etwas Umfangreicher sind, habe ich die wohl nicht genommen..

Ist das als BASH-Skript wenigstens "sauber" und wie nennt man das Konstrukt <(...) nochmal, so das ich es in der doch sehr umfangreichen Manpage auch finde?

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Finde das Bashism und beseitige es

Beitrag von rendegast » 15.07.2018 07:43:31

"Process Substitution"

Du kannst auch in 'man bash' nach dem String
[<][(]
suchen (mit Pager 'less' per '/')('update-alternatives --config pager').
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten