Wie leite ich eine Liste von Zahlen direkt von der Shell in einen Befehl? Zum Beispiel so etwas
[1,2,3,4] | sort
Würde geben
1
2
3
4
BEARBEITEN:
In Beantwortung der Antworten bisher freundlicherweise. . . Ich frage das, weil ich schnell eine Konsolenanwendung testen und debuggen möchte, die viele Zahlen als Eingabe akzeptiert, ohne viele Einzelwerte eingeben zu müssen, gefolgt von Wagenrückläufen. Ich möchte einfach den "One Liner" eingeben und ab und zu auf den Aufwärtspfeil tippen, um den Befehl zu wiederholen. Im Idealfall würde ich dies gerne ohne eine Textdatei mit den Werten tun (was natürlich der einfachste Weg wäre, dies zu tun.)
tr '[:punct:]' ' '
verwandelt alle Kommas vor dem zweiten in Leerzeichentr ',' '\n'
würde sie jemals sehen.tr -d '[]' | tr ',' '\n'
.Sie können ein "hier" -Dokument mit der
<<
Inline-E / A-Umleitungsoperator. Die Shell sucht nach dem von Ihnen angegebenen Token (in diesem Beispieleof
) als Dateiendemarker für das hier doc.Ein anderer Weg wäre, über die Werte zu iterieren,
echo
sie in sortieren:Wenn dir das gefallen würde
for
Schleife als Befehl verpackt, verwenden Sie eine Prozedur:quelle
oder
quelle
$
. ich habe bekommenecho '1\n2\n4\n3'
um die Ausgabe zu geben, für die Sie zeigenecho $'1\n2\n4\n3'
währendecho $'1\n2\n4\n3'
selbst Ausgänge$1
.2
.4
, und3
(in separaten Zeilen).Sie können Katze verwenden
quelle
sort
ganz von selbst.sort
ist eine Metapher für ein anderes, nicht näher bezeichnetes Programm - und dieses Programm könnte Testen Sie seine Standardeingabe, um zu sehen, ob es sich um eine TTY-Datei, eine Datei, eine Pipe oder was auch immer handelt.sort
als Metapher für etwas anderes, aber immer noch für sich. Dascat |
fügt nichts hinzu.umptyfratz
Geben Sie dann eine Eingabe ein (durch Strg + D abgeschlossen) und geben Sie dann eincat | umptyfratz
gefolgt von der gleichen Eingabe erhalten Sie möglicherweise zwei unterschiedliche Verhaltensweisen. Sie sagten: "Das ist nicht anders ..."bash
und nein, meinen Benutzern geht es gut. Pipes sind viel schneller, aber nach meinem Kommentar wurde mir klar, dass ich sie kostengünstig verwenden konnte, weil ich Multithreading bin.bash
ist nicht und müsste sich verzweigen, um das Rohr zuzuführen. Aber lasst uns das offline verschieben. Senden Sie mir eine E-Mail an hamiltonlabs.com. Wenn Sie Windows ausführen, gebe ich Ihnen eine kostenlose Kopie meiner Arbeit und wir können darüber sprechen, was ich getan habe.Die Antwort „supereinfach“: Geben Sie den Befehl und dann die Eingabe ein. (Genau genommen handelt es sich hierbei nicht um Pipeing. Das Wort "Pipe" wird in Bezug auf die E / A-Umleitung stark beansprucht, und dies wäre nicht einmal eine E / A-Umleitung, sondern lediglich Standard-E / A.) End with Ctrl + D (vorausgesetzt, Sie sind in irgendeiner Form * nix oder etwas Unix-ähnliches und haben Ihren EOF-Charakter nicht geändert). Zum Beispiel:
Das Ctrl + D kann als hallo
^D
und die erste Zeile der Ausgabe kann in derselben Zeile wie diese erscheinen:quelle