Onde os comandos 'fg', 'bg' e 'jobs' estão instalados? [duplicado]

16
    

Esta pergunta já tem uma resposta aqui:

    
  •              Por que não? qual 'comando funciona para' cd '? Não consigo encontrar o executável para 'cd' também!                                      4 respostas                          
  •     

fg , bg e jobs são usados para gerenciamento de tarefas. E por algum motivo (talvez seja apenas eu), não consigo encontrar onde seus binários estão nem suas páginas de manual ( whereis não imprime nenhuma informação). which não fornece saída. Os próprios comandos funcionam bem, no entanto.

Eu executei comandos como find /bin bg , mas sem resultados. Também corri find / bg para usar uma rede ampla.

    
por Guildenstern 24.04.2015 / 19:39

5 respostas

32

Você não está recebendo nenhum arquivo desses comandos porque eles são internos do shell ( bash ), não arquivos executáveis separados (por exemplo, arquivos binários, scripts). Na verdade, os shell-built-ins são compilados no executável do shell; Se você quiser, pode verificar o código-fonte para ter certeza disso. Como which ou whereis procura apenas por arquivos executáveis externos, você não está obtendo nenhuma saída para os internos.

Para saber se um comando é um alias ou uma função ou um arquivo externo, a melhor maneira é usar o type embutido:

$ type fg
fg is a shell builtin

$ type bg
bg is a shell builtin

$ type jobs
jobs is a shell builtin

Observe também que o comando find não está sintaticamente correto. A sintaxe correta (mais simples) é find /where/to/search -name 'name_to_search' .

Observe também que alguns comandos são implementados como um shell embutido e um executável autônomo separado. Para esses comandos, lembre-se sempre de que o comando interno terá precedência sobre o externo. Portanto, quando você executar echo something , o echo interno será executado. Se você deseja executar o executável binário echo , é necessário chamá-lo de uma maneira diferente. Uma maneira é usar o caminho completo para o executável: /bin/echo something .

Para exibir todas as versões disponíveis de um comando, execute type com a opção -a :

$ type -a echo
echo is a shell builtin
echo is /bin/echo

Para obter a documentação dos shell-built-ins, você pode verificar a página man de bash ou usar o comando help (que é um comando interno):

help jobs

Além disso, como @terdon apontou você deve usar type em vez de which .

    
por heemayl 24.04.2015 / 19:48
6

Eles são internos do shell - você pode obter informações básicas de uso digitando help fg ou help jobs no prompt do shell bash, ou informações mais detalhadas na página do manual bash.

    
por steeldriver 24.04.2015 / 19:45
4

Somando-se à resposta do heemayl, vale ressaltar que fg , bg e jobs precisam ser embutidos no shell, porque eles manipulam estruturas de dados na memória do shell e / ou o estado do kernel associado ao processo do shell. Não seria possível escrever um comando externo que faça o que fg faz.

Outros comandos que precisam ser incluídos incluem cd , %código%, %código%, %código%, %código%, %código%, %código%, %código%, eval (também conhecido como exec ) %código%, %código%, %código%, %código%, e exit . Seu shell pode ter uma lista maior, dependendo da quantidade de funcionalidade estendida implementada. POSIX tem uma lista diferente, mas sobreposta, de "utilitários incorporados especiais" - - Não sei por que coisas como export e history contam como comandos em vez de palavras-chave da estrutura de controle, ou porque o POSIX não considera coisas como read must-build-in quando eles não podem ser implementados de outra maneira. (Você poderia escrever um programa chamado set que chamasse source , mas isso só mudaria a configuração para em si, não para os processos subsequentes criados pelo shell, por isso não cumpriria sua especificação.)

    
por zwol 24.04.2015 / 23:10
2

Estes são comandos embutidos no shell. Não há binário para eles, pois são parte do Bash (ou qualquer shell que você esteja usando).

Eles estão documentados, por exemplo, na página de manual do Bash (veja a seção "SHELL BUILTIN COMMANDS")

    
por Florian Diesch 24.04.2015 / 19:46
2

fg , bg e jobs não são utilitários separados, mas fazem parte de bash (comandos internos do shell).

você pode encontrar mais sobre eles no bash manual usando o comando

man bash
    
por Registered User 24.04.2015 / 19:44