Was ist die Prozentzeichen-Eingabeaufforderung in einer Shell?

16

Beim Anschauen eines Videos habe ich Folgendes gesehen:

% more tinyUF.txt
10
4 3
3 8
6 5

Was ist dieses %Zeichen vor dem moreBefehl?

Maxim Koretskyi
quelle
2
export PS1=%??
Roman Gräf
@ RomanGräf, was ist das?
Maxim Koretskyi
1
Sie können das normale $Vorzeichen ändern , indem Sie angeben, export PS1=...wo ...das Ersatzzeichen steht.
Roman Gräf
@ RomanGräf, ich verstehe, danke für den Vorschlag
Maxim Koretskyi
@Roman Gräf: Mit der Eingabeaufforderung kann man viel mehr machen, als nur den Charakter zu ändern. Meins enthält den Computernamen (da ich häufig xterm-Fenster auf anderen Computern habe) und die letzten Verzeichnisse im aktuellen Pfad. Und wenn ich Wurzel bin, wird es hellrot.
Jamesqf

Antworten:

29

Dies ist die Shell-Eingabeaufforderung oder genauer gesagt die primäre Eingabeaufforderung der Shell ( es gibt mehrere ). Es ist die Art und Weise, wie die Shell sagt: " Mach weiter, ich bin jetzt bereit für Eingaben ".

Die %Eingabeaufforderung ist in csh-type-Shells üblich, während sh-shells (like bashund ksh93) normalerweise a $als Eingabeaufforderung verwendet.

Die Eingabeaufforderung ändert sich normalerweise #für den Root-Benutzer, da ein ausreichend leistungsfähiger Benutzer durch eine alternative Eingabeaufforderung (wie es der POSIX-Standard ausdrückt) an diese Leistung erinnert werden sollte .

Die primären Eingabeaufforderungs-Shell- shTypen werden durch den Wert der Shell-Variablen bestimmt PS1.


Zusammenfassung der Kommentare unten mit Ergänzungen:

Das #Zeichen der Root-Eingabeaufforderung (von beiden shund cshShells verwendet) stimmt zufällig mit dem allgemeinen Shell-Kommentarzeichen überein. Das Kopieren und Einfügen eines Befehls als root würde den eingefügten Befehl funktionsunfähig machen, wenn die Shell-Eingabeaufforderung ebenfalls kopiert wurde. Beachten Sie, dass dies #als Root-Eingabeaufforderung übernommen wurde, bevor die Shell eine Kommentar-Konvention hatte (Referenz: E-Mail von Doug McIlroy ).

In den esund rc-Shells von Plan 9 wird das ;Zeichen als Standardeingabeaufforderung verwendet. Dies hat zur Folge, dass das Kopieren und Einfügen eines Befehls, einschließlich der Eingabeaufforderung, weiterhin bedeutet, dass der eingefügte Befehl gültig ist (und ausgeführt wird).

Eine Möglichkeit, eine benutzerdefinierte, aber immer noch kopierfähige Shell-Eingabeaufforderung zu aktivieren, wäre die Verwendung von : something ;, wobei somethingbeispielsweise das aktuelle Verzeichnis, der aktuelle Hostname oder die aktuelle Uhrzeit verwendet werden können.

Kusalananda
quelle
2
Auch in zsh(eine Bourne-artige Shell, aber mit vielen Features aus tcsh). Beachten Sie, dass Bourne-ähnliche und csh-ähnliche Shells normalerweise #für Benutzer von uid 0 verwendet werden.
Stéphane Chazelas
1
Beachten Sie auch, dass dort rc-ähnliche Shells verwendet ;werden (man kann die gesamte Zeile kopieren und einfügen, und das ist gültiger Shell-Code, wobei die gleiche Idee wie bei der Root- #Eingabeaufforderung ein Kommentar ist).
Stéphane Chazelas
2
Eine sehr wichtige Option von # für root ist, dass Sie beim Kopieren eines Befehls einschließlich des Befehls keine Schäden verursachen (wenn # einen Kommentar startet, wird auch Ihr Befehl kommentiert (also die erste Zeile)). Einige Leute benutzen ">" und wenn Sie es auch kopieren, kann es Binärdateien überladen (vollständig leeren), wenn der Befehl einen vollständigen oder relativen Pfad hat oder wenn Sie sich im richtigen Verzeichnis befinden (und zum Beispiel über ausreichende Rechte verfügen, wenn Sie dies tun) Wurzel). Ich habe gesehen, dass dies passiert ist.
Olivier Dulac
1
@ StéphaneChazelas: War die # -for-root-Konvention nicht schon lange vor Terminals bekannt, bei denen das einfache Ausschneiden und Einfügen einer ganzen Zeile möglich war?
Henning Makholm
@ HenningMakholm, ja. Es entstand noch bevor csh # als Kommentar-Leader einführte. Es stimmt jedoch, dass #...Zeilen Kommentare sind, wenn sie kopiert und eingefügt werden, auch wenn dies nicht beabsichtigt war. Ich weiß nicht , ob es die Absicht , die hinter war ;in rcentweder, obwohl ich es ist eine bequeme Folge beobachten.
Stéphane Chazelas