Qual programa recebe comandos de linha de comando?

Qual programa recebe comandos de linha de comando?

Quando você escreve no terminal 'nome do arquivo vim', eu sei que o vim recebe o nome do arquivo como parâmetro, mas acho que um programa também recebe o vim como parâmetro ... é apenas o emulador de terminal ou outro programa?

Responder1

No momento em que você digita vim filenamena linha de comando, o shell já foi iniciado, portanto o shell (e o emulador de terminal) não é usado vimcomo argumento da linha de comando.

vim, por outro lado, mas não está disponível para o usuário. Quando um programa é iniciado, seu nome égeralmentedado como o argumento zero da linha de comando. Você pode ver isso iniciando um shell e repetindo $0:

$ sh
$ echo $0
sh
$ exit

O shell executa os comandos na linha de comando usando execve()(ou uma exec()função semelhante), cujoEspecificação POSIXdiz

O valor in argv[0]deve apontar para uma sequência de nome de arquivo associada ao processo que está sendo iniciado por uma das execfunções.

argv[0]no texto acima corresponde a $0um script de shell.

A seção Justificativa continua dizendo:

O requisito de um aplicativo POSIX estritamente conforme também afirma queo valor passado como o primeiro argumento será uma string de nome de arquivo associada ao processo que está sendo iniciado. Embora alguns aplicativos existentes passem um nome de caminho em vez de uma sequência de nome de arquivo em algumas circunstâncias, uma sequência de nome de arquivo é geralmente útil, pois o uso comum de argv[0]é na impressão de diagnósticos. Em alguns casos, o nome do arquivo passado não é o nome real do arquivo; por exemplo, muitas implementações do utilitário de login usam uma convenção de prefixar um <hyphen-minus>( -) ao nome do arquivo real, o que indica ao interpretador de comandos que está sendo invocado que se trata de um "shell de login".

informação relacionada