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 computername
und 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 computername
und 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 bash
Terminologie ist das "nullte" Argument der Befehlsname, der in Ihrem Fall lautete bash
.) bash
Verwendet diesen als Signal für Anmeldeaktivitäten wie das Ausführen .bash_profile
usw.
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
-l
Option 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 -l
ein 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, -bash
dass 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."
bash
Terminologie, 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 login
jeher 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 -l
Option 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.
-l
Option haben, wird sie login
immer 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 Siebash
in 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.