Wie füge ich die Ergebnisse eines Unix-Befehls in die tcsh-CLI ein?

358
Bryan

Oft möchte ich Dateien und Ordner mit Datumsstempel erstellen.

Zum Beispiel würde ich gerne einen Ordner mit einem yymmdd-Datumsstempel namens "160408-projectA" erstellen, indem Sie Folgendes eingeben:

mkdir <ctrl-;>-projectA

Ich habe es mit versucht bindkey -cs '^;' '`date +%y%m%d | perl -pe chomp`'

... aber es sagt "bad key spec ^;". Sogar das Umschalten auf eine andere Taste, zB ^ o, wird mit "160408: Befehl nicht gefunden" ausgegeben.

Ist das mit tcsh möglich?

0
Pfui. Das klingt möglich; Sie können es wahrscheinlich herausfinden. Wenn Sie jedoch eine Liste mit Zahlen wie 160408 haben, gibt es einen besseren Ansatz als die von Ihnen gesuchte Halbautomatisierung. Der bessere Ansatz ist die Verwendung von Programmierkenntnissen, um eine vollständige Automatisierung zu erstellen und nach Bedarf aus der Liste zu lesen. Zu oft eilen die Menschen mit der ersten Lösung voran, die sie sehen können, anstatt zurückzutreten und darüber nachzudenken, was idealer wäre. Theoretisch, wie automatisierbar ist das? Wenn Ihre Schrittfolge genau definiert ist, kann dies normalerweise von einem Programm ausgeführt werden. TOOGAM vor 8 Jahren 0
Es wurde klargestellt, dass "160408" ein Jymmdd-Datumsstempel ist. @TOOGAM, nicht sicher, auf welche "Liste" Sie sich beziehen. Ich habe es eine ganze Weile versucht, es herauszufinden, bevor ich hier fragte. ;) Bryan vor 8 Jahren 0

1 Antwort auf die Frage

0
TOOGAM

Das würde ich vermuten Ctrl- ;ist nicht möglich. Bevor wir uns mit dem Warum beschäftigen, lassen Sie mich darüber sprechen, was möglich ist.

bindkey -s '^;' '`date +%y%m%d | perl -pe chomp`'

Nehmen Sie einfach das "c" von Ihrem Versuch, Ctrl- zu verwenden O, und es funktioniert gut.

Der tcshBefehl wahrscheinlich nicht unterstützt Ctrl- ;, was eine sehr vernünftige Konstruktion, weil Tcsh gemeint ist, mit einem traditionellen Unix - Terminal (oder einer Software, die in ähnlicher Weise verhält) zu arbeiten, und traditionelles Unix - Terminals unterstützt nicht Ctrl- ;.

Also, warum nicht Unix - Terminals Unterstützung Ctrl- ;?

Der Hauptpunkt aller dieser CtrlSequenzen bestand darin, die ersten 32 ASCII-Zeichen auf einfache Weise einzugeben / darzustellen, da diese Zeichen keine leicht typisierbaren Zeichen haben. Das einfache Äquivalent zu Ctrl- ;ist nicht so schwierig zu tippen, ohne dass eine CtrlSequenz erforderlich ist. Aus diesem Grund wird normalerweise kein spezielles Ctrl-Zeichen (wie Ctrl- ;) unterstützt.

Ich werde näher darauf eingehen. Zunächst möchte ich anmerken, dass ein Großteil dieser Antwort auf einige von mir dokumentierte Informationen zu CtrlSequences auf meiner Website unter [CyberPillar] [: CtrlKeyboard Sequences ] verwiesen wurde .

Eine der Regeln für Strg-Zeichen lautet, wenn Sie Ctrlein Zeichen mit einem ASCII-Wert von 63 bis 95 gedrückt halten und drücken, erhalten Sie am Ende das Zeichen, das 64 weniger ASCII-Werte hat als das von Ihnen gedrückte Zeichen. (Ja, 64 wird gegebenenfalls von 63 abgezogen. Das wird später ausführlicher besprochen.)

Eine andere Regel ist, dass Sie Ctrlein Zeichen mit 96 Zeichen weniger als das eingegebene Zeichen erhalten, wenn Sie ein Zeichen mit einem ASCII-Wert von 96 bis 122 gedrückt halten. Als Ergebnis erhalten die Buchstaben Ctrl- Shift- A(Großbuchstaben) und Ctrl- a(Kleinbuchstaben) das gleiche Zeichen. Deshalb, wenn Sie die Taste Ctrl- c, Sie sehen können Ctrl- CEcho zurück. Das Endgerät wandelt die ASCII 3 in eine Zeichenfolge, die Ctrl- Cwenn die Ausgangsnachricht vorbereitet, ignoriert die Tatsache, dass man gedrückt Ctrl- cdie ASCII - 3 zu erzeugen.

;(Semikolon) ist ASCII 59, also nicht ASCII 64 bis 95 und ASCII 96 bis 122. Daher geben die soeben angegebenen Regeln (ASCII 63 bis 122) keine gemeinsame Interpretation für ASCII 59 (zur Deckung Ctrl- ;).

Ein Wert, der sich wie eine Ausnahme anfühlt, ist die allgemein unterstützte Regel, die für Ctrl- steht ?. Wenn Ctrl- ;eine gemeinsame Interpretation hätte, würde die gemeinsame Interpretation wahrscheinlich dem gleichen Muster wie Ctrl- folgen ?. Das ?Zeichen ist ASCII 63. Wenn Sie also 64 von 63 yeilds -1 abziehen, entspricht dies grundsätzlich 127 mit einer Unterlaufbedingung, die ignoriert werden kann. Das Ergebnis ist, dass Ctrl- die ?Tastenkombination tatsächlich 64 addiert, also 63 + 64 = 127. ASCII 127 entspricht oft dem DeleteSchlüssel, was schwierig zu repräsentieren ist, da Deletees ein allgemeines spezielles Verhalten gibt (das Löschen von Text). Daher kann ASCII 127 häufig wesentlich von einer gemeinsamen Unterstützung profitierenCtrlSequenz. Auf diese Weise kann eine Person den ASCII-127-Code relativ leicht über die Tastaturfolge eingeben.

Nach diesem Muster (Hinzufügen von 64) würde Ctrl- ;zu ASCII 123 führen, bei dem es sich um eine linke geschweifte Klammer (" {") handelt. Die Leute haben das nicht unterstützt Ctrl- ;als gängige Standardmethode für das Tippen, {da {es auf relativ einfache Weise auf der Tastatur eingegeben werden kann (durch Drücken von Shift- [).

Möglicherweise ein Terminalproblem, aber mit: `` bindkey -s ^ o '`date +% y% m% d | perl -pe chomp```` ... wenn ich "mkdir" eingebe"Es gibt mir:` `mkdir` Datum +% y% m% d | perl -pe chomp `` `(Ich bin unter OS X, RH6 macht dasselbe.) Bryan vor 8 Jahren 0
Ja, das wird erwartet. Dann tippen Sie weiter. Also `mkdir-projectA` wird zu `mkdir` `date +% y% m% d | perl -pe chomp``-projectA`, wodurch der von Ihnen angeforderte Ordner erstellt wird. Das Datum wird nicht in der Befehlszeile angezeigt, aber genau das, was Sie verlangt haben. Sie könnten auch folgendes tun: bindkey -s ^ i '! `Ls -t | Schwanz -1! `'(Ersetzen Sie! durch Backticks, die ich in diesem Kommentar nicht wie gewünscht zitieren lassen kann) TOOGAM vor 8 Jahren 0
Okay, ich hatte gehofft, es würde den Befehl ausführen und dann die Ergebnisse auf die Befehlszeile schieben, damit ich genau sehen kann, was erstellt wird, bevor ich die Eingabetaste drücke. Die Option -c für bindkey scheint nahe zu sein, ich brauche eine Kombination aus beiden. Bryan vor 8 Jahren 0