Ao inserir um comando inválido em um prompt do bash, você recebe a mensagem
-bash: {command}: command not found
O que significa -no início?
ssh computernamee seu comando não conte para replicar.
Ao inserir um comando inválido em um prompt do bash, você recebe a mensagem
-bash: {command}: command not found
O que significa -no início?
ssh computernamee seu comando não conte para replicar.
Respostas:
Isso significa que é um shell de login.
De man bash:
Um shell de logon é aquele cujo primeiro caractere do argumento zero é um - ou iniciado com a opção --login.
(Na bashterminologia, o argumento "zeroth" é o nome do comando que, no seu caso, era bash.) bashUsa isso como um sinal para realizar atividades de login, como execução .bash_profileetc.
Uma maneira pela qual o traço pode ser adicionado automaticamente é se o shell for iniciado exec. No manual do Bash :
exec [-cl] [-a name] [command [arguments]][...] Se a
-lopção for fornecida, o shell coloca um traço no início do argumento zeroth passado ao comando .
Compare essas duas tentativas para executar o comando nonexistent. Primeiro sem -l:
$ exec bash
$ nonexistent
bash: nonexistent: command not found
E, segundo, com:
$ exec -l bash
$ nonexistent
-bash: nonexistent: command not found
exec -lprepends um traço é uma maneira possível que pode causar bash para ser executado como -bash, mas isso por si só não dizer que é um shell de login, e há uma boa chance de que o OP não tem usado exec -lem tudo . A parte da documentação que diz que o -bashtorna um shell de logon é "INVOCAÇÃO Um shell de logon é aquele cujo primeiro caractere do argumento zero é um - ou iniciado com a opção --login".
bashterminologia, mas convenção do Unix + indexação C: Cada programa recebe uma lista de parâmetros, cuja entrada inicial é o nome do programa, seguida pelos argumentos. Desde matrizes C são indexadas começando com zero, argumento zero (ou seja, o argumento zeroth) é o nome do programa, e os argumentos reais começar com o índice 1.
A outra resposta é boa no que diz respeito, mas vale a pena mencionar que o recurso é mais geral que o bash.
Desde os tempos antigos, o loginprograma precedeu um traço para argv[0]quando ele executa o shell do usuário, e o shell reconheceu isso como um sinal de que deveria se comportar como um "shell de login". Está documentado nas páginas de manual da V7 aqui: login (1) , sh (1) .
Todos os programas que fornecem um serviço semelhante ao login (autenticar um usuário e executar um shell) devem seguir a regra "pré-traço". Por exemplo, o sshd faz como você pode ver em ssh / session.c sob este comentário:
/*
* 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.
*/
Todas as conchas reconhecem o traço principal. A -lopção equivalente não existe no shell Bourne clássico ou no csh original, mas a maioria dos shells mais recentes (bash, dash, ksh, yash, tcsh, zsh, rc, es, fish e qualquer versão semi-recente do csh) o possui.
-lopção, loginainda não a utiliza. Espera-se que todos os shells reconheçam o prefixo argv[0]como o mecanismo "oficial".
jhgjbjbkjln: command not found- não-bash:existem lá. Você está usandobashno Unix, Linux, OSX, ...? Eu pergunto porque talvez isso seja algo que uma implementação específica coloque antes da mensagem de erro por padrão, e isso não significa nada ... talvez.