Shell e aplicativos

7

É verdade que todos os comandos que podem ser executados no bash não fazem parte do bash? Estou gradualmente percebendo que confundi o shell com os aplicativos que podem ser executados nele.

    
por Tim 21.07.2011 / 01:21

3 respostas

23

Não há uma borda nítida entre o shell e os aplicativos.

Alguns dos comandos que você executa em um shell precisam ser construídos no shell, porque eles agem no processo do shell. Por exemplo, cd altera o diretório de trabalho do shell, e isso não pode ser feito de fora, então cd tem que ser um comando interno. Mas este é um detalhe de implementação. Um usuário casual não precisa saber que existem razões técnicas que obrigam cd a ser um comando interno.

Em outro extremo, existem grandes aplicativos feitos por diferentes autores, como o Firefox ou o Emacs. Estes não serão construídos em qualquer shell porque são muito grandes. Mas isso não é uma impossibilidade fundamental, apenas uma questão de design. Por exemplo, existem shells que possuem builtins para fazer aplicações simples de GUI.

No meio, existem comandos que podem ir em qualquer direção. Por exemplo, o comando echo não precisa ser construído no shell, mas quase todos os shell foram integrados porque são muito pequenos e usados com frequência, portanto, devem ser eficientes. Outro exemplo é kill , que para uso casual pode ser um comando externo, mas ter um built-in tem várias vantagens: você pode invocá-lo mesmo que tenha atingido um limite no número de processos, e você pode dar um número de trabalho do shell ( kill %2 ) em vez de um ID de processo. Até mesmo a construção [ … ] (que também pode ser escrita test ) poderia, em princípio, ser um comando externo, mas é construída em shells pelo mesmo motivo que echo .

Se você está curioso, pode verificar o status de um determinado comando com o comando type . Por exemplo, na minha configuração:

% type while type setenv cp emacs
while is a reserved word
type is a shell builtin
setenv is a shell function
cp is an alias for cp -i
emacs is /usr/bin/emacs

Palavras reservadas, como while e then , fazem parte da sintaxe do shell. Builtins são comandos que são construídos no shell e não requerem um executável externo. Funções são comandos compostos que são definidos e nomeados pelo usuário e podem ser chamados pelo nome. Os aliases são nomes abreviados definidos pelo usuário para comandos mais longos (comportando-se de maneira diferente das funções). O último exemplo é um comando externo.

¹ por 21.07.2011 / 02:35

8

Tente usar o comando bash type . type descreve o que é um comando: se for um shell embutido, se for um alias, se for outro programa ...

Exemplo:

[braga@coleman ~]$ type echo
echo is a shell builtin
[braga@coleman ~]$ type ls
ls is aliased to 'ls --color=auto'
[braga@coleman ~]$ type usermod
usermod is /usr/sbin/usermod

Alguns são incorporados, outros não. Use type se você quiser consultar sobre um comando específico. Consulte a documentação de bash para obter uma lista de todas as builtins.

  • O que é um builtin?

Builtin commands are contained within the shell itself. When the name of a builtin command is used as the first word of a simple command , the shell executes the command directly, without invoking another program.

  • O que é um alias?

Aliases allow a string to be substituted for a word when it is used as the first word of a simple command. The shell maintains a list of aliases that may be set and unset with the alias and unalias builtin commands.

Ambas as citações vêm do bash mannual .

    
por 21.07.2011 / 01:35
0
  • A maioria dos comandos não faz parte do shell. (Shell apenas executa o binário com esse nome.)
  • O Shell implementa cd e suas palavras-chave da linguagem de script (while, for, etc.)
  • Comandos como echo e teste podem ou não ser implementados no shell.
por 21.07.2011 / 17:34

Tags