xargs funktioniert nicht in Verbindung mit echo

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
DaCoda
Beiträge: 172
Registriert: 09.07.2019 21:58:10

xargs funktioniert nicht in Verbindung mit echo

Beitrag von DaCoda » 28.02.2023 09:03:38

Wieso funktioniert das nicht? Normal ersetzt xargs {} doch durch die Eingabe?

Code: Alles auswählen

echo hi | xargs echo "{}"
Erwartete Ausgabe:
Erhaltene Ausgabe:

Code: Alles auswählen

{} hi

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

Re: xargs funktioniert nicht in Verbindung mit echo

Beitrag von Meillo » 28.02.2023 09:58:22

Ich glaube, du bringst da was durcheinander. `{}' wird bei find(1) durch den Namen ersetzt, nicht bei xargs(1). xargs(1) liest von Stdin und haengt jede Zeile an die Argumentliste an. Damit ist das Verhalten, das du beschreibst richtig so.

Wenn du ``hi'' haben willst, dann geht das so:

Code: Alles auswählen

echo hi | xargs echo
... was gleichbedeutend ist mit:

Code: Alles auswählen

echo hi | xargs
Die Frage ist, was du eigentlich haben willst.


(Vielleicht hast du die veraltete Option `-i' verwendet, damit ersetzt xargs(1) wohl tatsaechlich `{}'.)
Use ed once in a while!

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

Re: xargs funktioniert nicht in Verbindung mit echo

Beitrag von tobo » 28.02.2023 10:26:10

Meillo hat geschrieben: ↑ zum Beitrag ↑
28.02.2023 09:58:22
(Vielleicht hast du die veraltete Option `-i' verwendet, damit ersetzt xargs(1) wohl tatsaechlich `{}'.)
Vermutlich. Wurde dann verwendet, wenn die Übergabe nicht am Ende steht.
Früher:

Code: Alles auswählen

echo FILE_OLD | xargs -i mv {} FILE_NEW
Heute:

Code: Alles auswählen

echo FILE_OLD | xargs -I{} mv {} FILE_NEW
Wobei man im letzten Beispiel den Platzhalter definiert, also auch was anderes nehmen kann (z.B. % oder SPUNK).

DaCoda
Beiträge: 172
Registriert: 09.07.2019 21:58:10

Re: xargs funktioniert nicht in Verbindung mit echo

Beitrag von DaCoda » 28.02.2023 10:56:54

Problem gelöst!
Von dieser Seite: https://www.tecmint.com/xargs-command-examples/ habe ich folgendes Beispiel:

Code: Alles auswählen

find Downloads -name "DomTerm" -type d -print0 | xargs -0 /bin/rm -v -rf "{}"
So scheint es früher funktioniert zu haben. Heute benötigt man -i.

Also so geht es heute (habe es eben getestet):

Code: Alles auswählen

echo hi | xargs -i echo "{}"

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

Re: xargs funktioniert nicht in Verbindung mit echo

Beitrag von tobo » 28.02.2023 11:05:45

1. Steht das an letzter Stelle und ist damit unnötig.
2. Ist das Quoten überflüssig (Fish-Shell ausgenommen).
3. Ist das veraltet (deprecated) und sollte damit nicht mehr verwendet werden.

Wenn du also nicht mal ansatzweise das liest, was man dir schreibt, dann kommuniziere das im Vorhinein, dann kann man sich jeglichen Aufwand bei dir zukünftig sparen.

reox
Beiträge: 2464
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: xargs funktioniert nicht in Verbindung mit echo

Beitrag von reox » 01.03.2023 11:14:22

Klingt wie ein XY Problem?
Weil was willst du mit echo hi | xargs echo eigentlich erreichen was ein echo hi nicht auch könnte?

Antworten