
Cuando escribes en la terminal 'nombre de archivo vim', sé que vim recibe el nombre de archivo como parámetro, pero supongo que un programa también recibe vim como parámetro... ¿es solo el emulador de terminal u otro programa?
Respuesta1
En el momento en que escribe vim filename
en la línea de comando, el shell ya se ha iniciado, por lo que el shell (y el emulador de terminal) no lo obtiene vim
como argumento de la línea de comando.
vim
, por otro lado, sí, pero no está disponible para el usuario. Cuando se inicia un programa, su nombre esgeneralmentedado como el argumento cero de la línea de comando. Puedes ver esto iniciando un shell y haciendo eco $0
:
$ sh
$ echo $0
sh
$ exit
El shell ejecuta los comandos en la línea de comando usando execve()
(o una exec()
función similar), cuyoespecificación POSIXdice
El valor en
argv[0]
debe apuntar a una cadena de nombre de archivo asociada con el proceso que inicia una de lasexec
funciones.
argv[0]
en el texto anterior corresponde a $0
un script de shell.
La sección de Justificación continúa diciendo:
El requisito de una aplicación POSIX estrictamente conforme también establece queel valor pasado como primer argumento será una cadena de nombre de archivo asociada con el proceso que se está iniciando. Aunque algunas aplicaciones existentes pasan un nombre de ruta en lugar de una cadena de nombre de archivo en algunas circunstancias, una cadena de nombre de archivo generalmente es más útil, ya que el uso común de
argv[0]
es en diagnósticos de impresión. En algunos casos, el nombre de archivo pasado no es el nombre de archivo real del archivo; por ejemplo, muchas implementaciones de la utilidad de inicio de sesión utilizan una convención de anteponer un<hyphen-minus>
(-
) al nombre de archivo real, lo que indica al intérprete de comandos que se invoca que es un "shell de inicio de sesión".