[gelöst] Cat *.txt in bash script - Fehler

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

[gelöst] Cat *.txt in bash script - Fehler

Beitrag von joe2017 » 18.06.2020 21:51:27

Guten Abend,

Ich habe ein merkwürdiges Problem und hätte mal eine Frage.

Wenn ich im terminal folgenden Befehl eingebe, funktioniert dieser. Hiermit werden alle Inhalte aller txt files in eine neue Datei geschrieben.

Code: Alles auswählen

cat "/path/to/files/*.txt" > "/path/to/new.txt" 
Wenn ich das selbe in einem bash script ausführe, erhalte ich die Meldung, dass der Pfad nicht existiert. Gibt es hier ein bekanntes Problem, bzw muss ich das im Script anders schreiben?

Danke schon mal an die Experten :hail:
Zuletzt geändert von joe2017 am 19.06.2020 12:09:32, insgesamt 1-mal geändert.

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Cat *.txt in bash script - Fehler

Beitrag von smutbert » 18.06.2020 22:18:11

Wenn die bash nicht-interaktiv läuft ist globbing per default deaktiviert, beispielsweise wird also der * nicht zu den vorhandenen Dateinamen expandiert.

Du könntest natürlich im Skript mit

Code: Alles auswählen

set +f
globbing aktivieren, aber möglicherweise ist das keine gute Idee und ich bin mir sicher, dass einer der Shellprofis hier einen besseren Ausweg weiß, vielleicht find (und sich bald meldet nachdem ich das geschrieben habe).

tobo
Beiträge: 1989
Registriert: 10.12.2008 10:51:41

Re: Cat *.txt in bash script - Fehler

Beitrag von tobo » 18.06.2020 22:23:42

joe2017 hat geschrieben: ↑ zum Beitrag ↑
18.06.2020 21:51:27
Wenn ich im terminal folgenden Befehl eingebe, funktioniert dieser.
Nö, der funktioniert weder in einem Terminal, noch in einem Skript, da die Sonderbedeutung aller in "..." eingeschlossenen Zeichen aufgehoben wird, mit Ausnahme von $, ` und \. Somit ist der * ein * - da wird nichts expandiert!

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Cat *.txt in bash script - Fehler

Beitrag von JTH » 18.06.2020 22:26:21

Du darfst einen Pfad, der eine Wildcard – den * – enthält, nicht quoten " ". Innerhalb von Quotes wird die Wildcard nicht durch die dazu passenden Dateinamen ersetzt.

Das geht auch weder in der interaktiven Shell, noch in Skripten.
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: Cat *.txt in bash script - Fehler

Beitrag von joe2017 » 19.06.2020 12:09:07

Ahhh, da habt ihr natürlich vollkommen recht!
Hat super funktioniert. Ich dachte, dass ich nur keine einfachen Anführungszeichen (') verwenden darf.
Auf die simple Idee bin ich natürlich nicht gekommen das einfach weg zu lassen.

Wenn ich schon bei einer script Frage bin. Habt Ihr eine Idee wie ich bei einer Abfrage z.B. (ip rout | grep "suche") nur die erste gefundene Zeile anzeigen lasse?

tobo
Beiträge: 1989
Registriert: 10.12.2008 10:51:41

Re: [gelöst] Cat *.txt in bash script - Fehler

Beitrag von tobo » 19.06.2020 12:15:17

Im Speziellen durch

Code: Alles auswählen

... | grep -m1 "suche"
und Allgemein durch

Code: Alles auswählen

... | head -n1

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: [gelöst] Cat *.txt in bash script - Fehler

Beitrag von joe2017 » 20.06.2020 13:43:07

Super! den "head" Befehl hatte ich sogar schon getestet. Aber wahrscheinlich war meine Syntax falsch. Ich glaube ich hatte das falsch herum getestet (head - n1 | ...)

Aber hat perfekt funktioniert!

Antworten