/ / Mercurial reduziert Linien in eine einzelne Linie, wenn die Ausgabe weitergeleitet wird - Shell, Umleitung, Pipe, interaktiv

Mercurial reduziert Zeilen in einzelne Zeilen, wenn die Ausgabe weitergeleitet wird - Shell, Umleitung, Pipe, interaktiv

Ich möchte nach der Ausgabe eines Quecksilberbefehls (hg) sortieren. Die Ausgabe von hg log wird bei der Weiterleitung zu einem anderen Befehl in eine Zeile reduziert, aber ich möchte getrennte Zeilen beibehalten.

Hier ist ein minimal reproduzierbarer Fall:

# Initial setup
mkdir /tmp/hgbug; cd /tmp/hgbug; hg init;
touch README.md; hg add README.md
h commit -m "initial commit"

# Bug - the echo command replaces a complex find command
echo "1an2bn3cn" | xargs -I % hg log --template "%" | sort

# Actual Output
# 1a2b3c

# Expected Output
# 1a
# 2b
# 3c

Der interessante Teil ist, dass Quecksilber die Linien nicht kollabiert, wenn die Ausgabe nicht weitergeleitet oder umgeleitet wird.

echo "1an2bn3cn" | xargs -I % hg log --template "%"
# Actual Output
# 1a
# 2b
# 3c

Wie verhindere ich, dass Quecksilber beim Umleiten der Ausgabe Linien zusammenfÀllt?

Zur Verdeutlichung ist hier ein vollstÀndigeres Beispiel zum Vergleichen der Ausgabe von hg mit echo mit beiden xargs und ein while Schleife.

#!/bin/bash
cd /tmp/hgbug

echo "# hg log - xargs"
echo $"1an2bn3c" | xargs -I {} hg log --template "hg-{}" | sort

echo
echo "# plain echo - xargs"
echo $"1an2bn3c" | xargs -I {} echo "echo-{}" | sort

echo
echo "# hg log - while read"
echo $"1an2bn3c" | while read -r file; do hg log --template "hg-$file"; done | sort

echo
echo "# plain echo - while read"
echo $"1an2bn3c" | while read -r file; do echo "echo-$file"; done | sort

Dieses Skript gibt Folgendes aus:

# hg log - xargs
hg-1ahg-2bhg-3c

# plain echo - xargs
echo-1a
echo-2b
echo-3c

# hg log - while read
hg-1ahg-2bhg-3c

# plain echo - while read
echo-1a
echo-2b
echo-3c

Antworten:

0 fĂŒr Antwort № 1

hg log fĂŒgt keine abschließende neue Zeile zur Ausgabe hinzu, wenn der --template Flagge ist gesetzt und Der Shell-Befehl wird umgeleitet oder an einen anderen Befehl weitergeleitet.

Damit es funktioniert, mĂŒssen Sie die neue Zeile wie folgt zur Vorlagenzeichenfolge hinzufĂŒgen:

echo "1an2bn3cn" | xargs -I % hg log --template "%n" | sort
# Output
1a
2b
3c