Cuando ingresa un comando no válido en un indicador de bash, recibe el mensaje
-bash: {command}: command not found
¿Qué significa -
al principio?
ssh computername
y tu comando no cuenta para replicar.
Cuando ingresa un comando no válido en un indicador de bash, recibe el mensaje
-bash: {command}: command not found
¿Qué significa -
al principio?
ssh computername
y tu comando no cuenta para replicar.
Respuestas:
Significa que es un shell de inicio de sesión.
De man bash
:
Un shell de inicio de sesión es aquel cuyo primer carácter del argumento cero es un -, o uno que comenzó con la opción --login.
(En bash
terminología, el argumento "zeroth" es el nombre del comando que, en su caso, era bash
.) Lo bash
utiliza como una señal para realizar actividades de inicio de sesión, como la ejecución .bash_profile
, etc.
Una forma en que el guión se puede agregar automáticamente es si se inicia el shell exec
. Del manual de Bash :
exec [-cl] [-a name] [command [arguments]]
[...] Si
-l
se proporciona la opción, el shell coloca un guión al comienzo del argumento zeroth pasado al comando .
Compare estos dos intentos de ejecutar el comando nonexistent
. Primero sin -l
:
$ exec bash
$ nonexistent
bash: nonexistent: command not found
Y, segundo, con:
$ exec -l bash
$ nonexistent
-bash: nonexistent: command not found
exec -l
anteponga un guión es una forma posible de hacer que bash se ejecute como -bash
, pero eso por sí solo no dice que es un shell de inicio de sesión, y hay una muy buena posibilidad de que el OP no se haya utilizado exec -l
en absoluto . La parte de la documentación que dice -bash
que lo convierte en un shell de inicio de sesión es "INVOCACIÓN Un shell de inicio de sesión es aquel cuyo primer carácter del argumento cero es un -, o uno que comenzó con la opción --login".
bash
terminología, sino convención de Unix + indexación en C: cada programa obtiene una lista de parámetros, cuya entrada inicial es el nombre del programa, seguido de los argumentos. Dado que las matrices C se indexan comenzando con cero, el argumento cero (es decir, el argumento cero) es el nombre del programa, y los argumentos reales comienzan con el índice 1.
La otra respuesta está bien en lo que respecta, pero vale la pena mencionar que la característica es más general que bash.
Desde la antigüedad, el login
programa ha añadido un guión a argv[0]
cuando ejecuta el shell del usuario, y el shell ha reconocido esto como una señal de que debería comportarse como un "shell de inicio de sesión". Está documentado en las páginas de manual de V7 aquí: login (1) , sh (1) .
Todos los programas que proporcionan un servicio similar al de inicio de sesión (autenticar a un usuario y ejecutar un shell) deben seguir la regla de "guión previo". Por ejemplo, sshd hace lo que puede ver en ssh / session.c debajo de este comentario:
/*
* 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.
*/
Todos los proyectiles reconocen el guión principal. La -l
opción equivalente no existe en el shell Bourne clásico o en el csh original, pero la mayoría de los shells más nuevos (bash, dash, ksh, yash, tcsh, zsh, rc, es, fish y cualquier versión semi-reciente de csh) la tienen.
-l
opción, login
todavía no la usan. Se espera que todos los shells reconozcan el prefijo argv[0]
como el mecanismo "oficial".
jhgjbjbkjln: command not found
no-bash:
allí. ¿Estás usandobash
en Unix, Linux, OSX, ...? Pregunto porque tal vez esto es algo que una implementación específica puso antes del mensaje de error por defecto, y no significa nada ... tal vez.