Wenn Sie an einer Bash-Eingabeaufforderung einen ungültigen Befehl eingeben, wird die Meldung angezeigt
-bash: {command}: command not found
Was bedeutet das ganz -am Anfang?
ssh computernameund Ihr Befehl nicht zu zählen, um zu replizieren.
Wenn Sie an einer Bash-Eingabeaufforderung einen ungültigen Befehl eingeben, wird die Meldung angezeigt
-bash: {command}: command not found
Was bedeutet das ganz -am Anfang?
ssh computernameund Ihr Befehl nicht zu zählen, um zu replizieren.
Antworten:
Dies bedeutet, dass es sich um eine Anmeldeshell handelt.
Von man bash:
Eine Login-Shell ist eine Shell, deren erstes Zeichen des Arguments Null ein - ist, oder eine Shell, die mit der Option --login gestartet wurde.
(In der bashTerminologie ist das "nullte" Argument der Befehlsname, der in Ihrem Fall lautete bash.) bashVerwendet diesen als Signal für Anmeldeaktivitäten wie das Ausführen .bash_profileusw.
Ein Weg, wie der Bindestrich automatisch hinzugefügt werden kann, ist, wenn die Shell mit gestartet wird exec. Aus dem Bash-Handbuch :
exec [-cl] [-a name] [command [arguments]][...] Wenn die
-lOption angegeben ist, setzt die Shell einen Bindestrich am Anfang des nullten Arguments, das an command übergeben wird .
Vergleichen Sie diese beiden Versuche, um den Befehl auszuführen nonexistent. Zuerst ohne -l:
$ exec bash
$ nonexistent
bash: nonexistent: command not found
Und zweitens mit:
$ exec -l bash
$ nonexistent
-bash: nonexistent: command not found
exec -lein Strich prepends ist eine mögliche Art und Weise , die bash verursachen kann wie ausgeführt werden -bash, aber das allein sagt nicht , dass es sich um ein Login - Shell ist, und es gibt eine sehr gute Chance , dass die OP nicht verwendet hat exec -lüberhaupt . Der Teil der Dokumentation, der besagt, -bashdass es sich um eine Anmeldeshell handelt, lautet "INVOCATION Eine Anmeldeshell ist eine Shell, deren erstes Zeichen des Arguments Null ein - ist, oder eine Shell, die mit der Option --login gestartet wurde."
bashTerminologie, sondern Unix-Konvention + C-Indizierung: Jedem Programm wird eine Parameterliste übergeben, deren erster Eintrag der Programmname ist, gefolgt von den Argumenten. Da C-Arrays beginnend mit Null indiziert werden, ist das Argument Null (
Die andere Antwort ist in Ordnung, aber es ist erwähnenswert, dass die Funktion allgemeiner ist als bash.
Seit loginjeher hat das Programm der Ausführung argv[0]der Benutzer-Shell einen Gedankenstrich vorangestellt , und die Shell hat dies als Zeichen dafür erkannt, dass sie sich als "Anmelde-Shell" verhalten sollte. Dies ist in den V7-Manpages hier dokumentiert: login (1) , sh (1) .
Alle Programme, die einen anmeldungsähnlichen Dienst bereitstellen (Benutzer authentifizieren und eine Shell ausführen), sollten der Regel "Bindestrich voranstellen" folgen. Zum Beispiel macht sshd, wie Sie in ssh / session.c unter diesem Kommentar sehen können:
/*
* If we have no command, execute the shell. In this case, the shell
* name to be passed in argv[0] is preceded by '-' to indicate that
* this is a login shell.
*/
Alle Muscheln erkennen den führenden Strich. Die entsprechende -lOption gibt es in der klassischen Bourne-Shell oder der ursprünglichen csh nicht, aber die meisten neueren Shells (bash, dash, ksh, yash, tcsh, zsh, rc, es, fish und alle neueren Versionen von csh) haben sie.
-lOption haben, wird sie loginimmer noch nicht verwendet. Von allen Shells wird erwartet, dass sie das Präfix argv[0]als "offiziellen" Mechanismus erkennen.
jhgjbjbkjln: command not found- nein-bash:. Verwenden Siebashin Unix, Linux, OSX, ...? Ich frage, weil dies möglicherweise eine bestimmte Implementierung ist, die standardmäßig vor die Fehlermeldung gestellt wird, und sie nichts bedeutet ... vielleicht.