Was bedeutet diese Syntax?

16

Ich bin neu im Terminal und versuche zu lernen, wie man es benutzt.

Was machen diese Zeilen? Und wie arbeiten sie?

echo -n "Today's date is: "
date +"%A, %B %-d, %Y"
Unbekannte Person
quelle
7
$ man date && man echoan der Muschel.
Code_dredd

Antworten:

76
$ type echo
echo is a shell builtin

Das heißt, der echoBefehl ist Teil des bashProgramms selbst (vorausgesetzt, Sie verwenden bash)

-n ist eine Option, also mal sehen, was es tut

$ help echo
Write arguments to the standard output
...
-n  do not append a newline

Also, wenn wir die Linie laufen:

zanna@monster:~$ echo -n "Today's date is: "
Today's date is: zanna@monster:~$ 

Hmm, das sieht nicht sehr gut aus, weil es nach dem gedruckten Text keinen Zeilenumbruch gibt. Wir werden darauf zurückkommen.

$ type date
date is /bin/date

ach so der datebefehl ist ein separates programm. Was tut es?

$ man date
Display the current time in the given FORMAT, or set the system date.

Die Zeichen nach dem dateBefehl sind Formatoptionen (die vorangestellt werden müssen +) - es werden verschiedene Teile des Datums angegeben (z. B. %Ader vollständige Name des Wochentags - man datedie vollständige Liste der Optionen finden Sie im Rest des Befehls).

$ date +"%A, %B %-d, %Y"
Tuesday, February 7, 2017

Wenn wir also die Befehle in einem Skript zusammenfassen und dann das Skript ausführen, erhalten wir

Today's date is: Tuesday, February 7, 2017

Nett! Wenn Sie den gleichen Effekt in einem Terminal erzielen möchten, können Sie die beiden Befehle durch ein Semikolon anstelle einer neuen Zeile trennen:

$ echo -n "Today's date is: " ; date +"%A, %B %-d, %Y"
Today's date is: Tuesday, February 7, 2017
Zanna
quelle
21
Dies ist eine erweiterte RTFM-Antwort, +1
YSC
1
Ich würde sagen, es fehlt eine Erklärung für das Pluszeichen vor dem Argument
Délisson Junio
@ DélissonJunio ​​bearbeitet, aber Melebius 'Antwort zeigt es besser mit dem direkten Manpage-Zitat
Zanna
@Zanna Ich bin nicht der OP, aber was mir aufgefallen ist, war die Tatsache, dass das Plus seltsam erscheint, da ich denke, dass bash alles zwischen Anführungszeichen als ein Argument interpretiert, ohne das Plus. Aber ich denke, dies ist eine andere Frage
Délisson Junio
2
Sie können das Plus auch in die Anführungszeichen setzen. Bash einen ungerade-Gefühl Weg läuft zusammen zitiert und neben Text, zB cd „$ x“ / Ausgabe oder sogar cd nospace / „mit Platz“ / nospace
StarWeaver
10

Sie sollten mit Manualpages den Befehl starten man. Geben Sie einfach ein man <command>, um Informationen über a zu erhalten <command>. Das Navigieren manist nicht sehr intuitiv, es gibt jedoch zahlreiche Anleitungen, z. B. https://wiki.gentoo.org/wiki/Man_page/Navigate#Navigating_and_searching_man_pages .

Relevante Teile von man echound man date:

Echo

echo [SHORT-OPTION]... [STRING]...

Echo the STRING(s) to standard output.

-n     do not output the trailing newline

Daher wird die Zeichenfolge gedruckt und danach nicht in die neue Zeile gewechselt (dies ist das Standardverhalten). Die Ausgabe des nächsten Befehls wird daher auf der rechten Seite der wiedergegebenen Zeichenfolge gedruckt.

Datum

date [OPTION]... [+FORMAT]

FORMAT controls the output.  Interpreted sequences are:

%A     locale's full weekday name (e.g., Sunday)

%B     locale's full month name (e.g., January)

%d     day of month (e.g., 01)

%Y     year

By default, date pads numeric fields with zeroes.  The following optional flags may follow '%':

-      (hyphen) do not pad the field

Ich hoffe es ist klar. Fühlen Sie sich frei zu fragen, wenn nicht.

Melebius
quelle
Danke vielmals. Ich habe noch eine Frage: Gibt es bereits eine integrierte Funktion zum Anzeigen des Datums im Terminal?
Unbekannte Person
@Zanna Es ist eigentlich keine neue Frage, es hängt mit einer Frage zusammen, die ich gestellt habe.
Unbekannte Person
1
@Unknownperson Wenn Sie möchten, dass das Datum standardmäßig im Terminal angezeigt wird, ist dies eine völlig andere Frage als "Was macht dieser Code?", Da Sie die PS1-Variable bearbeiten müssten (oder möglicherweise mit der Terminal-App) Einstellungen - darüber bin ich unwissend), die außerhalb des Rahmens dieses Beitrags liegt
Zanna
1
@Unknownperson date tut anzeigen Datum im Terminal (Befehlszeilenschnittstelle). Wenn Sie etwas mehr wollen (wie es Zanna vorschlägt), stellen Sie bitte eine neue Frage.
Melebius
4
echo -n "Today's date is: "

Es wird gedruckt: Das heutige Datum ist:

date +"%A, %B %-d, %Y"

Es wird ungefähr so ​​gedruckt: Dienstag, 7. Februar 2017

Hinweis :

  1. Verwenden Sie manoder --helpBefehl, um mehr über andere Befehle zu erfahren.
    z.B :

    man echo
    echo --help
  2. Probieren Sie diese Herausforderungen aus. Herausforderungen sind wirklich gut, um Ihnen dabei zu helfen, Dinge am Terminal zu erledigen.

Avinash
quelle