Quando si immette un comando non valido al prompt di bash, viene visualizzato il messaggio
-bash: {command}: command not found
Cosa -significa all'inizio?
ssh computernamee il tuo comando non contare per replicare.
Quando si immette un comando non valido al prompt di bash, viene visualizzato il messaggio
-bash: {command}: command not found
Cosa -significa all'inizio?
ssh computernamee il tuo comando non contare per replicare.
Risposte:
Significa che è una shell di login.
Da man bash:
Una shell di login è quella il cui primo carattere dell'argomento zero è un -, oppure uno è iniziato con l'opzione --login.
(Nella bashterminologia, l'argomento "zeroth" è il nome del comando che, nel tuo caso, era bash.) Lo bashutilizza come segnale per eseguire attività di accesso come l'esecuzione .bash_profile, ecc.
Un modo in cui il trattino può essere aggiunto automaticamente è se la shell viene avviata con exec. Dal manuale di Bash :
exec [-cl] [-a name] [command [arguments]][...] Se l'
-lopzione è fornita, la shell posiziona un trattino all'inizio dell'argomento zeroth passato al comando .
Confronta questi due tentativi di eseguire il comando nonexistent. Primo senza -l:
$ exec bash
$ nonexistent
bash: nonexistent: command not found
E, in secondo luogo, con:
$ exec -l bash
$ nonexistent
-bash: nonexistent: command not found
exec -lanteponi un trattino è un modo possibile che può causare l'esecuzione di bash -bash, ma che da solo non dice che si tratta di una shell di accesso e ci sono ottime possibilità che l'OP non abbia usato exec -laffatto . La parte della documentazione che dice che la -bashrende una shell di login è "INVOCATION Una shell di login è quella il cui primo carattere dell'argomento zero è un -, o uno è iniziato con l'opzione --login".
bashterminologia, ma una convenzione Unix + indicizzazione C: a ciascun programma viene passato un elenco di parametri, la cui voce iniziale è il nome del programma, seguita dagli argomenti. Poiché le matrici C sono indicizzate a partire da zero, l'argomento zero (ovvero l'argomento zeroth) è il nome del programma e gli argomenti effettivi iniziano con l'indice 1.
L'altra risposta va bene fino in fondo, ma vale la pena ricordare che la funzionalità è più generale di bash.
Sin dai tempi antichi, il loginprogramma ha anteposto un trattino a argv[0]quando esegue la shell dell'utente e la shell ha riconosciuto questo come un segno che dovrebbe comportarsi come una "shell di accesso". È documentato nelle pagine man di V7 qui: login (1) , sh (1) .
Tutti i programmi che forniscono un servizio simile al login (autenticano un utente ed eseguono una shell) dovrebbero seguire la regola "anteprime trattino". Ad esempio, sshd fa come puoi vedere in ssh / session.c sotto questo commento:
/*
* 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.
*/
Tutte le shell riconoscono il trattino iniziale. L' -lopzione equivalente non esiste nella classica shell Bourne o nel csh originale, ma la maggior parte delle shell più recenti (bash, dash, ksh, yash, tcsh, zsh, rc, es, fish e qualsiasi versione semi-recente di csh) ce l'hanno.
-lopzione, loginnon la usa ancora. Ci si aspetta che tutte le shell riconoscano il prefisso argv[0]come meccanismo "ufficiale".
jhgjbjbkjln: command not found- no-bash:. Stai usandobashin Unix, Linux, OSX, ...? Chiedo perché forse questo è qualcosa che un'implementazione specifica ha messo di default prima del messaggio di errore, e non significa nulla ... forse.