Sé cuál es la diferencia entre los shells interactivos / no interactivos y de inicio de sesión / no inicio de sesión, pero parece que en la práctica nunca habrá un shell de inicio de sesión no interactivo a menos que tenga algo como /bin/bash --login some-script.sh
en un script (e incluso eso parece un poco extraño) ¿Es esto correcto o son más comunes?
14
telnet towel.blinkenlights.nl
para un shell de inicio de sesión que no es interactivo ;-)Respuestas:
Supongo que está hablando del concepto de Bash de inicio de sesión frente a no inicio de sesión y shells de Bash interactivo frente a no interactivo como se describe en la sección Invocación de la página de manual. (Esto es diferente de la interpretación en la respuesta de James Youngman de cualquier comando arbitrario utilizado como "shell" (o intérprete de comandos de usuario) en el
passwd(5)
archivo y si ese programa acepta o no la entrada del usuario; algunos, como/usr/sbin/nologin
, obviamente, no lo hacen. )Estás en lo correcto
/bin/bash --login some-script.sh
y producirá una invocación de Bash de inicio de sesión no interactiva, y este es quizás un ejemplo patológico. Hay un caso, tal vez poco común, pero no es realmente raro, que produce un shell de entrada no interactivo:ssh somehost < some-file
. Aquísshd
comenzará Bash conargv[0]
set to-bash
porque no se le ha dado un comando para ejecutar, lo que hace que Bash se considere un shell de inicio de sesión, pero, debido a que stdin no está conectado a un terminal, Bash no se establecerá en modo interactivo ($-
no contendrái
) .(Personalmente, ese caso parece mucho más razonable que lo contrario, lo
ssh somehost somecommand
que no se considera un "shell de inicio de sesión" a pesar de que es un inicio de sesión nuevosomehost
tal como lo es anteriormente).Recientemente hice lo que debería haber hecho hace mucho tiempo y armé una tabla de modos de Bash y qué archivos de inicio se ejecutan . Si te resulta confuso, anímate a que al menos yo también lo haga. Me desconcierta cuál era su objetivo original con las reglas sobre cuándo
.bashrc
se ejecuta.fuente
La mayoría de los shells de inicio de sesión por conteo en un sistema recién instalado no son interactivos, en realidad:
Claramente
/bin/bash
y/bin/sh
son conchas tradicionales y son interactivas. Pero todos los demás elementos de esa lista no son interactivos. Si está leyendo la lista y no sabe qué hace uno de ellos, puede buscar su página de manual (con, por ejemplo,man nologin
oman sync
).Lo que hace realmente el comando
Al mirar el historial de publicaciones del Capitán Man, veo que son bastante inexpertos con Unix. Entonces, tal vez la pregunta en el comentario sobre no seguir relacionada con la línea de comando en la parte superior de la respuesta, no simplemente la salida. Así que también explicaré la línea de comandos, a pesar de que está realmente fuera de tema para esta pregunta.
El comando es una tubería de Unix . Una canalización es una cadena de comandos, lo lee de izquierda a derecha, en la que la salida del primer comando se convierte en la entrada del segundo, la salida del segundo se convierte en la entrada del tercero, y así sucesivamente, hasta que el Fin de la tubería. La salida del último proceso se muestra en el terminal (a menos que se haya redirigido). Consulte la entrada de Wikipedia sobre tuberías de shell para obtener más información.
Si no comprende lo que está haciendo una tubería, simplemente puede ejecutarla en segmentos para ver qué está sucediendo. También puede leer la página del manual de los comandos que se están utilizando (aquí
awk
,sort
yuniq
). De hecho, deberías hacer eso ahora. Esperaré.Vamos a ejecutar las etapas de la tubería de forma incremental (puede hacerlo de manera segura en su propio sistema Unix):
El resultado anterior es simplemente el contenido del séptimo campo del
/etc/passwd
archivo. Esa es la base de datos (archivo de texto plano) que le dice al sistema cuál es el shell de inicio de sesión de todos. Si desea obtener más información,/etc/passwd
simplemente léalo (es legible en todo el mundo) y mire la página del manual(man 5 passwd)
.Entonces, al leer la lista completa, puede hacerse una idea de cuáles son los artículos populares, pero ese no es un buen formato para responder a esta pregunta, porque la pregunta era realmente sobre cuán comunes son los shells no interactivos. Vamos a contarlos. La forma más sencilla de hacerlo es ordenar primero los elementos:
Podemos usar el programa
uniq
para mostrarnos solo los elementos únicos:~ $ awk -F: '{print $ 7}' </ etc / passwd | ordenar | uniq | sed -e 's / ^ / /' / bin / bash / bin / false / bin / sh / bin / sync / usr / sbin / nologin
Pero espera, no sirve de nada, ¿cuántos de cada uno estaban allí? Preguntemos
uniq
(¡lea la página del manual!):Esa es la salida que vimos en la parte superior de la respuesta, por supuesto. Vamos a ordenarlo nuevamente para ver las entradas en orden:
Espera, eso no puede ser correcto, 17 viene antes de 1 y 5 después de 23. El problema es que los artículos se ordenan lexicográficamente . Pidamos
sort
ordenarlos numéricamente y en orden inverso:Creo que eso explica todo en la respuesta original. Si aún no está claro sobre los detalles de lo que hacen esos comandos, puede leer las páginas del manual. Si aún no tiene claros los principios de lo que está sucediendo, podría ser mejor comenzar leyendo un libro (en línea o en papel) que explique Unix y Linux.
fuente
/bin/sync
una concha? Entonces, ¿alguna utilidad es un shell?bash --login
en la pregunta, está preguntando específicamente sobrebash
procesos que no tienen lai
opción establecida. (Estos surgen de comandos comossh somehost < script.sh
; este será un shell de "inicio de sesión, no interactivo" en los sentidos especificados en la sección INVOCACIÓN de la página de manual de Bash.)